題意分析
關於這道題,意思就是兩個人摘葉子,誰最後摘到編號為x的誰就贏了。既然是葉子,說明其最多隻有一個分支,由於題目上說了是無向圖,那就是度數小於等於1的節點。也就是一步步移除度數小於等於1的節點,直到將編號為x的節點刪掉遊戲才結束。
那麼我們可以將x這個節點作為根節點,初始時這棵樹的樣子如下:
兩個人摘來摘去,誰也不想讓對方贏,最終的結果必然是這個樣子。(這是當節點總數大於等於3的情況)
這樣我們就不難發現,當節點x的度數大於等於2時,除了上圖中的那三個點,還剩n-3個點,若n-3為偶數,那麼最終肯定是後摘的那個人贏;反之就是先摘的那個人贏;
當節點x的度數小於2時,那一定是先摘的那個人贏。
分析完了,下面看程式碼。
程式碼
#include<iostream>
using namespace std;
int t, n, x, u, v;
int main()
{
cin >> t;
while(t--)
{
cin >> n >> x;
int degree = 0; //x這個節點的度數
for(int i = 0; i < n - 1;i ++) //注意這裡,是n-1行
{
cin >> u >> v;
if(u == x || v == x) //由於題目中說不會有環,故此處直接這樣判斷
degree++;
}
if(degree <= 1) //度數為1,肯定先開始的先贏
puts("Ayush");
else
{
if((n - 3) % 2 == 0)
puts("Ashish");
else
puts("Ayush");
}
}
return 0;
}