题目链接:
题意:
中文,不解释
题解:
把样例拿出来看看,你会发现以x为节点是否能赢,就是与x相连的边权值的和或者异或是否为奇数。
1 #include2 #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 }else35 {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 }