hdu5996 dingyeye loves stone

来源:互联网 发布:置信度传播算法 编辑:程序博客网 时间:2024/05/29 12:14

仿照阶梯博弈来思考,很显然只有奇数层(0在第0层)上的数是有用的。

#include<cstdio>#include<vector>#include<algorithm>using namespace std;const int maxn=100010;vector<int> son[maxn];int n,a[maxn],ans;void dfs(int u,int flag){    if (flag) ans^=a[u];    for (vector<int>::iterator it=son[u].begin();it!=son[u].end();++it) dfs(*it,flag^1);}int solve(){    int x;    scanf("%d",&n);    for (int i=0;i<n;i++) son[i].clear();    for (int i=1;i<n;i++)    {        scanf("%d",&x);        son[x].push_back(i);    }    for (int i=0;i<n;i++) scanf("%d",&a[i]);    ans=0;    dfs(0,0);    return ans;}int main(){    int T;    scanf("%d",&T);    while (T--)        if (solve()) printf("win\n");        else printf("lose\n");}