题目描述
现在给你一个联通无向图,共有 个点, 条边,图内没有环,并且有一个特殊节点 。
现在 Ayush 和 Ashish 进行一场游戏,由 Ayush 先手,每一步选择一个度数小于等于 的节点并将其与其所连的边删去。
谁先删去特殊节点谁便取胜,给出 个情况和每次的点数 和 条边,若二人均采取最优操作,判断谁会取胜。
输入样例
2
3 1
2 1
3 1
3 2
1 2
1 3
输出样例
Ashish
Ayush
题目分析
这是一道与图相关的 简单博弈题。
首先我们可以知道若特殊点本身就是度数小于等于 的点即叶节点,那么先手删去这个点便取得胜利。否则当前选手需要尽量避免让特殊点成为可以被后手删去的叶节点。在这个前提下,我们便可以知道此时的情况便为你删一次无关点我删一次无关点,而无关点的总数便为 总点数-2,在面对仅剩特殊节点和仅一条与其相连的边之前,我们可以删除任意一个与不会造成必胜局面的节点和其所连边,而谁先遇到这种必胜局面谁便可以删去特殊点取得胜利,而这个结果我们可以通过无关点总点数的奇偶性判断。
落实到代码上,我们只需要统计与特殊节点相连的节点个数,再进行判断即可。
Accept代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t; cin >> t;
while (t --)
{
int n, x;
cin >> n >> x;
int k = 0;
for (int i = 1; i < n; i ++)
{
int a, b;
cin >> a >> b;
if (a == x || b == x) k ++;
}
if (k == 1 || k == 0) cout << "Ayush\n";
else
{
n -= 2;
if (n % 2 == 0) cout << "Ayush\n";
else cout << "Ashish\n";
}
}
return 0;
}