标签:break amp style ges blocks ++ splay 解释 art
题目链接:hdu_5963_朋友
题意:
中文,不解释
题解:
把样例拿出来看看,你会发现以x为节点是否能赢,就是与x相连的边权值的和或者异或是否为奇数。
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef long long ll; 5 6 const int N=80007; 7 int t,n,m,g[N],nxt[N],v[N],w[N],ed; 8 9 void adg(int x,int y,int z){v[++ed]=y,w[ed]=z,nxt[ed]=g[x],g[x]=ed;} 10 11 int main() 12 { 13 scanf("%d",&t); 14 while(t--) 15 { 16 scanf("%d%d",&n,&m); 17 memset(g,0,sizeof(g)),ed=0; 18 F(i,1,n-1) 19 { 20 int x,y,z; 21 scanf("%d%d%d",&x,&y,&z); 22 adg(x,y,z),adg(y,x,z); 23 } 24 F(i,1,m) 25 { 26 int op; 27 scanf("%d",&op); 28 if(op) 29 { 30 int x,y,z; 31 scanf("%d%d%d",&x,&y,&z); 32 for(int i=g[x];i;i=nxt[i])if(v[i]==y){w[i]=z;break;} 33 for(int i=g[y];i;i=nxt[i])if(v[i]==x){w[i]=z;break;} 34 }else 35 { 36 int x; 37 scanf("%d",&x); 38 int ans=0; 39 for(int i=g[x];i;i=nxt[i])ans^=w[i]; 40 if(ans&1)puts("Girls win!"); 41 else puts("Boys win!"); 42 } 43 } 44 } 45 return 0; 46 }
标签:break amp style ges blocks ++ splay 解释 art
原文地址:http://www.cnblogs.com/bin-gege/p/6033798.html