Codeforces Game On Leaves(樹)

在這裏插入圖片描述
題目大意:
給定一棵樹,有兩個人輪流拆除樹上的葉子節點,摘除編號爲x的節點的人獲勝,問最後誰會獲勝

解題思路:
以x爲根節點,求x的所有孩子節點的數量,如果數量爲奇數,則Ayush獲勝,否則Ashish獲勝,這裏需要注意一種特殊情況,即第一個人就能取得勝利,所有記錄直接與x相連的節點的數量

代碼:

#include <bits/stdc++.h>
using namespace std;
int t,n,x,f[1010],sum[1010];
vector<int> arr[1010];
void dfs(int u,int fa)
{
    for(auto v:arr[u])
        if(v!=fa)
        {
            dfs(v,u);
            sum[u]+=sum[v]+1;
        }
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int cnt=0;
        memset(f,0,sizeof(f));
        memset(sum,0, sizeof(sum));
        for(int i=0;i<1010;++i)
            arr[i].clear();
        scanf("%d%d",&n,&x);
        for(int i=0;i<n-1;++i) {
            int u, v;
            scanf("%d%d", &u, &v);
            if (u == x || v == x) cnt++;
            arr[u].push_back(v);
            arr[v].push_back(u);
        }
        dfs(x,-1);
        if(cnt==0||cnt==1)
        {
            puts("Ayush");
            continue;
        }
        if(sum[x]%2==0) puts("Ashish");
        else puts("Ayush");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章