题目链接:https://codeforces.com/group/5yyKg9gx7m/contest/270506/problem/E
思路
由题意可知,每次去除的只能是完美二叉树,而完美二叉树的节点数必为奇数,无论给出多少个节点,将它们分解为一个个奇数的话,总节点为奇数的树只能够分解为奇数个奇数(比如样例中5=1+3+1,一共3个奇数),反之总节点为偶数的树只能分解为偶数个奇数(4=1+1+1+1),因此,无论两人的策略如何,游戏的胜负总是由一开始给出的树的节点数决定的。
代码如下:(其实就是判个奇偶
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<cstring>
#include<climits>
#include<vector>
#include<queue>
#include<stack>
#define lowbit(i) ((i)&(-(i)))
#define ll long long
using namespace std;
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int N;
scanf("%d", &N);
int x, y;
for (int i = 1; i < N ; i++)
scanf("%d%d", &x, &y);
if (N & 1)
printf("Alice\n");
else
printf("Bob\n");
}
return 0;
}