MUV LUV UNLIMITED

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 143    Accepted Submission(s): 16

Problem Description
联合国太平洋方面第11军横滨基地的娱乐活动很少。207小队的成员通常会在晚饭后聚在PX玩游戏。然而无论玩什么游戏,白银武总是会输。于是白银武决定利用另一个世界中的博弈论知识来让自己转败为胜。

白银武向战友们介绍了这样一个游戏:

给出一棵n个点以1为根的有根树。两个人轮流进行操作。操作人需要选出至少1个叶子(即没有儿子的点)删掉。无法操作的人输。

不幸的是,白银武发现自己的博弈论知识并不能判断自己应该选择先手还是后手。所以请你帮他判断,在双方都进行最优决策的情况下,是先手必胜还是后手必胜。

 
Input
第1行一个整数T,代表数据组数。

对于每组数据,

第1行一个正整数n,代表树上结点个数。

接下来一行n−1个数字,依次表示2∼n点的父亲编号。

2≤n≤106

每个测试文件中的n之和不超过106。

 
Output
若在双方都选择最优决策的情况下,先手必胜,请输出"Takeru";否则输出"Meiya"。
 
Sample Input
2
3
1 1
4
1 2 3
 
Sample Output
Takeru
Meiya

Hint

对于第一组数据,先手选择删去2号点,那么后手只能删去3号点,之后先手删去1号点取得胜利。

 
Source
642ccpcQHD
 题解:
如果存在一个叶子节点 x,且它的父亲节点的出度大于 1,那么先手一定必胜。考虑当先手只取 x 这一个节点后:变成先手必败态,那么当前先手自然是必胜的变成先手必胜态,那么存在一个方案使得去掉 x 以及其他某个叶子节点集合 S 后,能够到达一个先手必败态。而由于删除 x 后没有产生其他叶子节点,即 S 中所有点在删除 x 前就已经是叶子节点了,所以先手可以直接删除 {x}∪S 而转移到先手必败态
接下来考虑所有叶子节点的父亲的出度都等于 1 的情况。求出每个叶子节点的链长(即到达第一个出度不为 1 的祖先需要经过多少条边)。如果所有链长均为偶数则先手必败,否则先手必胜。其中必胜的策略为将所有链长为奇数的叶子删去使得他们链长变为偶数。时间复杂度:O(∑n)。
参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pii pair<int,int>
#define pil pair<int,ll>
#define mkp make_pair
const int INF=0x3f3f3f3f;
const ll inf=1e18;
const int maxn=1e6+;
int siz[maxn],fa[maxn],cnt[maxn];
int T,n,m;
vector<int> vec;
struct Edge{
int v,nxt;
} edge[maxn<<];
int head[maxn],tot; void Init()
{
tot=; fa[]=-;
for(int i=;i<=n;++i)
head[i]=-,cnt[i]=;
vec.clear();
} void AddEdge(int x,int y)
{
edge[tot].v=y;
edge[tot].nxt=head[x];
head[x]=tot++;
} void dfs(int u)
{
for(int i=head[u];~i;i=edge[i].nxt)
{
int v=edge[i].v;
if(v==fa[u]) continue;
fa[v]=u;
dfs(v);
}
} int main()
{
scanf("%d",&T) ;
while(T--)
{
scanf("%d",&n);
Init(); for(int i=;i<=n;++i)
{
int x;
scanf("%d",&x);
cnt[x]++;cnt[i]++;
AddEdge(i,x);AddEdge(x,i);
}
dfs(); cnt[]++; for(int i=;i<=n;++i)
if(cnt[i]==) vec.push_back(i); int flag=;
for(int i=,len=vec.size();i<len;++i)
{
int v=vec[i];
if(cnt[fa[v]]>) {flag=;break;}
int res=; while(cnt[fa[v]]==)
{
v=fa[v];
res++;
}
if(res&) flag=;
} if(flag==) puts("Takeru");
else puts("Meiya");
} return ;
}

2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)的更多相关文章

  1. 2019CCPC秦皇岛 J MUV LUV EXTRA(KMP)

    MUV LUV EXTRA Time Limit: 2000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  2. MUV LUV UNLIMITED Gym - 102361K

    题目链接:https://vjudge.net/problem/Gym-102361K 题意:两个人轮流取树叶,最后没有树叶取的人输. 思路:求出所有树叶所在链的长度即可,如果都为偶数先手必败,否则先 ...

  3. 2019-ccpc秦皇岛现场赛

    https://www.cnblogs.com/31415926535x/p/11625462.html 昨天和队友模拟了下今年秦皇岛的区域赛,,,(我全程在演 题目链接 D - Decimal 签到 ...

  4. HDU6740 2019CCPC秦皇岛赛区 J. MUV LUV EXTRA

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6740思路:求小数部分后k位的真前后缀 倒着kmp就好 #include<bits/stdc++.h& ...

  5. 【2019 CCPC 秦皇岛】J - MUV LUV EXTRA

    原题: 题意: 给你两个整数a和b,再给你一个正小数,整数部分忽略不计,只考虑小数部分的循环节,对于所有可能的循环节,令其长度为l,在小数部分循环出现的长度为p,最后一个循环节允许不完整,但是缺少的部 ...

  6. K 大神的博弈知识汇总

    博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻 ...

  7. 2019CCPC秦皇岛 E题 Escape(网络流)

    Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  8. 2019CCPC秦皇岛D题 Decimal

    Decimal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  9. 2019CCPC秦皇岛I题 Invoker(DP)

    Invoker Time Limit: 15000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

随机推荐

  1. 008.Kubernetes二进制部署Nginx实现高可用

    一 Nginx代理实现kube-apiserver高可用 1.1 Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller ...

  2. 如何构建自己的 react hooks

    我们组的前端妹子在组内分享时谈到了 react 的钩子,趁此机会我也对我所理解的内容进行下总结,方便更多的同学了解.在 React 的 v16.8.0 版本里添加了 hooks 的这种新的 API,我 ...

  3. 一个类GraphQL的ORM数据访问框架发布

    Zongsoft.Data 发布公告 很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后,今天正式宣布对外推广! 这是一个类 GraphQL 风格的  ...

  4. visible:hidden和dispaly:none的区别

    display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...

  5. 万恶之源-python的进化

    列表 列表的增删改查 3. 列列表的嵌套 元组和元组嵌套 5. range ⼀一. 列表 1.1 列表的介绍 列表是python的基础数据类型之⼀一 ,其他编程语⾔言也有类似的数据类型. 比如JS中的 ...

  6. 从壹开始 [ Ids4实战 ] 之六 ║ 统一角色管理(上)

    前言 书接上文,咱们在上周,通过一篇<思考> 性质的文章,和很多小伙伴简单的讨论了下,如何统一同步处理角色的问题,众说纷纭,这个我一会儿会在下文详细说到,而且我最终也定稿方案了.所以今天咱 ...

  7. SpringBoot 项目脚手架

    写在前面 之前也一直很少有写SpringBoot项目相关的文章,今天 准备整理一个我自己初始化SpringBoot项目时的一个脚手架,便于自己后面查阅.因为SpringBoot的约定大于配置,在整合各 ...

  8. k8s 获取 Pod ip 添加到环境变量

    0x00 事件 有一个需要将 Pod 自身的 ip 地址添加到环境变量的需求,可以在 yaml 文件的 env 中这样设置: env: - name: POD_OWN_IP_ADDRESS value ...

  9. 前端开发单位em

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 如何理解Nginx, WSGI, Flask(Django)之间的关系

    如何理解Nginx, WSGI, Flask(Django)之间的关系 值得指出的是,WSGI 是一种协议,需要区分几个相近的名词: uwsgi 同 wsgi 一样也是一种协议,uWSGI服务器正是使 ...