51nod Nim дерево один тысяча девятьсот шестьдесят три

Этот вопрос действительно дерево играет Nim ...

Знание является лестница игра точки, где конкретно здоровье → _ → PS: ручной поиск лестницы игры

Этот вопрос затем преобразуются в многолучевой лестничной игру, поэтому мы определяем глубина корневого узла 0, то право всех нечетных значений глубинной точки XOR выглядеть Канкан не 0

Но будьте осторожны, чтобы не добавить сюда DFS стороны, прямо дать название свойство глубины (фа [я] <я) О (п) читать в то же время, как мы добавляем ребро T в глубине выходит из ....

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define go(u) for(Rg int i=head[u],v=e[i].to;i;v=e[i=e[i].nxt].to)
#define ll long long
using namespace std;
const int M=3e5+3;
typedef int arr[M];
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int read(){ int x=0,f=1; char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} int n,ans; arr d;
int main(){
    int T=read();
    while(T--){ n=read(),ans=0; Rg int x;
        fp(i,1,n-1) x=read(),d[i]=d[x]^1;
        fp(i,0,n-1){ x=read();
            if(d[i]&1) ans^=x;
        } puts(ans?"win":"lose");
    } return 0;
}

рекомендация

отwww.cnblogs.com/Judge/p/11619821.html
рекомендация