Codeforces Round #646 (Div. 2) C. Game On Leaves(树上博弈)

题目链接:https://codeforces.com/contest/1363/problem/C

题意

有一棵 $n$ 个结点的树,每次只能取叶子结点,判断谁能最先取到结点 $x$ 。

题解

除非结点 $x$ 一开始就为叶子结点,否则二人一定会取到只剩 $3$ 个结点,且中间结点为 $x$ 的情况,判断结点 $x$ 是否为叶子结点和 $n - 3$ 的奇偶性即可。

代码

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, x; cin >> n >> x;
    int degree_x = 0;    
    for (int i = 0; i < n - 1; i++) {
        int u, v; cin >> u >> v;
        degree_x += (u == x) or (v == x);
    }
    if (degree_x <= 1)
        cout << "Ayush" << "\n";
    else
        cout << ((n - 3) % 2 == 0 ? "Ashish" : "Ayush") << "\n";
}

int main() {
    int t; cin >> t;
    while (t--) solve();
}

 

上一篇:Codeforces Round #646 (Div. 2)【C. Game On Leaves 题解】


下一篇:输入形如"a-b,b-c,b-d"的字符串,计算最远路径