Codeforces #646 C.Game On Leaves(思维题)

Game On Leaves

题目:

Ayush and Ashish play a game on an unrooted tree consisting of nn nodes numbered 1 to n. Players make the following move in turns:

  • Select any leaf node in the tree and remove it together with any edge which has this node as one of its endpoints. A leaf node is a node with degree less than or equal to 1.

A tree is a connected undirected graph without cycles.

There is a special node numbered x. The player who removes this node wins the game.

Ayush moves first. Determine the winner of the game if each player plays optimally.

输入:

The first line of the input contains a single integer t (1≤t≤10) — the number of testcases. The description of the test cases follows.

The first line of each testcase contains two integers nn and x (1≤n≤1000,1≤x≤n) — the number of nodes in the tree and the special node respectively.

Each of the next n−1 lines contain two integers u, v (1≤u,v≤n, u≠v), meaning that there is an edge between nodes u and v in the tree.

输出:

For every test case, if Ayush wins the game, print "Ayush", otherwise print "Ashish" (without quotes).

 

题目大意:

给出一个n个结点的无向连通图,每次只能去掉一个度为1的结点,问最后谁能将给出的特殊的结点去掉,有t个输入,每个输入第一行是n和k,之后是n-1行,k是特殊结点的编号,每一行代表的是两个节点间无向连通,第一次是Ayush开始走

思路:

因为两人均是最佳状态(即不会主动的使k的度为1),所以只有当k的度为1时,先走的Ayush会直接获胜;否则只有当只剩下一个结点与k结点相连时(即度变为1),才能去掉k结点,即剩下的n-2个结点是需要去掉的,一次只能去掉一个,所以只需判断n-2奇偶,就可得出答案。

代码:

#include <iostream>
using namespace std;

int main() {
	int t;
	cin >> t;
	
	while(t--) {
		int n, k;
		int cnt = 0;
		cin >> n >> k;
		
		for(int i = 1; i < n; i++) {
			int b, c;
			cin >> b >> c;
			if(b == k || c == k) cnt++;		//统计k结点的度 
		}
		
		if(cnt <= 1) {				//如果度小于等于1则直接获胜 
			cout << "Ayush" << endl;
			continue;
		}
		
		int x = n - 2;
		if(x % 2 == 0) {
			cout << "Ayush" << endl;
		}else {
			cout << "Ashish" << endl;
		}
	}
	
	return 0;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值