综上SG(g)=SG(g')+1 .若根结点有多个分支,相当有nim中的每一堆异或即可.
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+20; int n,f[N]; vector<int> e[N]; void dfs(int u,int fa) { f[u]=0; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(v==fa) continue; dfs(v,u); f[u]^=(f[v]+1); } } int main() { while(cin>>n) { for(int i=1;i<=n;i++) e[i].clear(); int u,v; for(int i=1;i<=n-1;i++) { scanf("%d%d",&u,&v); e[u].push_back(v); e[v].push_back(u); } dfs(1,0); if(f[1]) puts("Alice"); else puts("Bob"); } return 0; }