http://www.caiyiwen.tech/article/18.html
- B - Binary Tree
- 簡單的樹上博弈題,考察的是透過現象看本質、不被輸入帶偏的能力。
- 首先我們知道,滿k層二叉樹的結點數爲1+2+2²+2³+……+2k-1=2k-1
- 注意到上面2^k-1這個數爲奇數,我們還知道,任意一個數減去一個奇數都會改變其奇偶性。(奇數-奇數=偶數,偶數-奇數=奇數)
- 最終勝利態爲0(樹上結點全部拿完,淪爲空樹),是一個偶數。
- 如果一棵樹上有奇數個結點,那麼我們需要奇數次操作將其變成偶數;
- 如果一棵樹上有偶數個結點,那麼我們需要偶數次操作將其變成偶數。
- 奇數次操作,則最後一個拿到根節點的人爲A;偶數次操作即爲B。
- (千萬不要看到題目就去建樹,這題的樹是背景而不是解題模型)
代碼:
#include<cstdio>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int x,y;
for(int i=0;i<n-1;++i)
{
scanf("%d%d",&x,&y);
}
if(n&1)
{
printf("Alice\n");
}
else
{
printf("Bob\n");
}
}
return 0;
}