满分做法:
树可以分为所有节点度数都是奇数和至少有一个节点度数是偶数。对于第一个状态,一定转移到第二个状态;而第二个状态一定可以转移到第一个状态(一定存在一个偶节点删除后他和他的子树成为第一个状态)。
这样当先手局面为全奇时,只能变为第二个情况,后手总能把情况再变回第一个,这样最后先手就面临一条边的情况,所以就输了。入股先手局面为有偶数时,他就成了后手。
#include<queue>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxm=1e6+7;
int n;
int du[maxm];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
int x,y;
scanf("%d%d",&x,&y);
du[x]++;
du[y]++;
}
for(int i=1;i<=n;i++)
{
if(du[i]%2==0)
{
printf("Alice
");
return 0;
}
}
printf("Bob
");
return 0;
}