2019 China Collegiate K. MUV LUV UNLIMITED(思维,博弈)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 China Collegiate K. MUV LUV UNLIMITED(思维,博弈)相关的知识,希望对你有一定的参考价值。

LINK

题意

两个人玩游戏,每次可以删除树上至少 1 1 1个叶子节点

无法操作的人输,求先后手的胜负情况


①.当只有一条链的时候,点数奇数先手胜,偶数后手胜利

②.当存在多条链时

Ⅰ.若某个叶子节点 x x x存在兄弟节点 y y y,那么先手必胜。

证明

若删去 x x x是必败态那么就删去,先手必胜

若删去 x x x后是必胜态,后手可以采用点集为 s s s的删除策略来必胜

那么先手删去 x + s x+s x+s后是必败态,先手必胜。

且因为点集 s s s不存在 x x x的父亲,所以先手可以操作点集 x + s x+s x+s

Ⅱ.当不存在叶子节点有兄弟节点时,考虑如何转化到Ⅰ的情况

当所有叶子节点到离自己最近的分支祖先距离都是偶数时候

不管先手怎么操作,后手都可以效仿先手,返回给先手还是偶数

直到存在一个叶子节点有兄弟节点,那么后手就可以赢

否则

先手可以一步把所有奇数叶子节点变成偶数,相当于互换先后手,先手必胜

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e7+10;
vector<int>vec[maxn];
int ans,leaf[maxn];
void dfs(int u,int depth)
{
	if( vec[u].size()==0 )
	{	
		leaf[u] = 1;//是叶子节点
		if( depth&1 )	ans = true;//先手必胜 
	}
	int leafa = 0; 
	for( auto v:vec[u] )
	{
		if( vec[u].size()>=2 )	dfs(v,1);//新的分支 
		else	dfs(v,depth+1);
		leafa |= leaf[v];//标记自己是否有儿子是叶子节点 
	}
	if( vec[u].size()>=2 && leafa )	ans = true;
}
int main()
{
	int t; cin >> t;
	while( t-- )
	{
		int n; cin >> n;
		for(int i=2;i<=n;i++)
		{
			int x; scanf("%d",&x);
			vec[x].push_back( i );
		}
		ans = 0; 
		if( vec[1].size()>=2 )	dfs(1,0);
		else		dfs(1,1);
		if( ans )	printf("Takeru\\n");
		else	printf("Meiya\\n");
		for(int i=1;i<=n;i++)	vec[i].clear(),leaf[i] = 0;
	}
}

发现其实第三种情况覆盖前两种,所以可以简化一下

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e7+10;
vector<int>vec[maxn];
int ans;
void dfs(int u,int depth)
{
	if( vec[u].size()==0 )
	{
		if( depth&1 )	ans = true;//先手必胜 
	}
	for( auto v:vec[u] )
	{
		if( vec[u].size()>=2 )	dfs(v,1);//新的分支 
		else	dfs(v,depth+1);
	}
}
int main()
{
	int t; cin >> t;
	while( t-- )
	{
		int n; cin >> n;
		for(int i=2;i<=n;i++)
		{
			int x; scanf("%d",&x);
			vec[x].push_back( i );
		}
		ans = 0; 
		if( vec[1].size()>=2 )	dfs(1,0);
		else		dfs(1,1);
		if( ans )	printf("Takeru\\n");
		else	printf("Meiya\\n");
		for(int i=1;i<=n;i++)	vec[i].clear();
	}
}

以上是关于2019 China Collegiate K. MUV LUV UNLIMITED(思维,博弈)的主要内容,如果未能解决你的问题,请参考以下文章

The 2019 China Collegiate Programming Contest Harbin Site

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation

The 2019 China Collegiate Programming Contest Harbin Site J. Justifying the Conjecture

2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(点双连通)

The 2019 China Collegiate Programming Contest Harbin Site I - Interesting Permutation 思维