传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5996
以下只是搬题解并重组了语言……
对于偶深度的点上的石子,若对手移动它们,则可模仿操作;
对于奇深度上的石子,移动一次即成为偶数深度的点。
所以做法为
设根节点的深度为0,将所有深度为奇数的节点的石子数目xor起来,
则先手必胜当且仅当这个xor和不为0。
证明同阶梯博弈。
#include<stdio.h>
int f[100005];
inline int read(){int a;scanf("%d",&a);return a;}
inline void solve()
{
int n=read(),ans=0;
for (int i=1;i<n;i++) f[i]=f[read()]+1;
for (int i=0,k;i<n;i++) if ((k=read()) && (f[i]&1)) ans^=k;
puts(ans?"win":"lose");
}
int main(){for (int T=read();T--;) solve();}