ZR 舔到(博弈)

题目链接

满分做法:

树可以分为所有节点度数都是奇数和至少有一个节点度数是偶数。对于第一个状态,一定转移到第二个状态;而第二个状态一定可以转移到第一个状态(一定存在一个偶节点删除后他和他的子树成为第一个状态)。

这样当先手局面为全奇时,只能变为第二个情况,后手总能把情况再变回第一个,这样最后先手就面临一条边的情况,所以就输了。入股先手局面为有偶数时,他就成了后手。

#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\n");
   return 0;
  }
 }
 printf("Bob\n"); 
 return 0;	
}
posted @ 2019-11-06 14:42  lihan123  阅读(160)  评论(0编辑  收藏  举报