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. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

  2. 创建基于OData的Web API - Knowledge Builder API, Part IV: Write Controller

    基于上一篇<创建基于OData的Web API - Knowledge Builder API, Part III:Write Model and Controller>,新创建的ODat ...

  3. nyoj 366 D的小L (全排列)

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...

  4. 领扣(LeetCode)字符串相加 个人题解

    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包 ...

  5. spring security进阶 使用数据库中的账户和密码认证

    目录 spring security 使用数据库中的账户和密码认证 一.原理分析 二.代码实现 1.新建一个javaWeb工程 2.用户认证的实现 3.测试 三.总结 spring security ...

  6. 18个awk的经典实战案例

    介绍 这些案例是我收集起来的,大多都是我自己遇到过的,有些比较经典,有些比较具有代表性. 这些awk案例我也录了相关视频的讲解awk 18个经典实战案例精讲,欢迎大家去瞅瞅. 插入几个新字段 在&qu ...

  7. no matches for kind "Deployment" in version "extensions/v1beta1"

    0x00 Problem [root@k8sm90 demo]# kubectl create -f tomcat-deployment.yaml error: unable to recognize ...

  8. 【Luogu P3375】字符串匹配KMP算法模板

    Luogu P3375 模式串:即题目中的S2所代表的意义 文本串:即题目中的S1所代表的意义 对于字符串匹配,有一种很显然的朴素算法:在S1中枚举起点一位一位匹配,失配之后起点往后移动一位,从头开始 ...

  9. pynlp报错:pynlpir.LicenseError: Your license appears to have expired. Try running "pynlpir update"解决办法。

    使用pyltp做文本挖掘时报错: pynlpir.LicenseError: Your license appears to have expired. Try running "pynlp ...

  10. 深度学习解决NLP问题:语义相似度计算

    在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSSM.C ...