原题:HDU-5996
很详细的一篇尼姆博弈的博客 :尼姆博弈
这个题目把跟节点定义为深度为0,然后先手拿掉最后一个奇数层的点就必赢,所以只要把每个奇数层的点XOR起来,为非尼姆平衡就好了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int depth[100010];
int father[100010];
int main() {
int N,i,t;
scanf("%d",&N);
while(N--) {
int n;
scanf("%d",&n);
depth[0]=0;
father[0]=0;
for(i=1; i<n; i++) {
scanf("%d",&t);
father[i]=t;
depth[i]=depth[t]+1;
}
int ans=0;
for(i=0; i<n; i++) {
scanf("%d",&t);
if(depth[i]%2)
ans=ans^t;
}
if(ans)
printf("win\n");
else
printf("lose\n");
}
return 0;
}