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. 010.Kubernetes二进制部署kube-controller-manager

    一 部署高可用kube-controller-manager 1.1 高可用kube-controller-manager介绍 本实验部署一个三实例 kube-controller-manager 的 ...

  2. Springboot 自动配置浅析

    Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...

  3. 微信小程序this.data和this.setData({})的区别

    this.data.xx是用来获取页面data对象的----------只是js(逻辑层)数据的更改: this.setData是用来更新界面的---------用于更新view层的.

  4. NetCore3.0 文件上传与大文件上传的限制

    NetCore文件上传两种方式 NetCore官方给出的两种文件上传方式分别为“缓冲”.“流式”.我简单的说说两种的区别, 1.缓冲:通过模型绑定先把整个文件保存到内存,然后我们通过IFormFile ...

  5. 使用C#+FFmpeg+DirectX+dxva2硬件解码播放h264流

    本文门槛较高,因此行文看起来会乱一些,如果你看到某处能会心一笑请马上联系我开始摆龙门阵 如果你跟随这篇文章实现了播放器,那你会得到一个高效率,低cpu占用(单路720p视频解码播放占用1%左右cpu) ...

  6. 逆向libbaiduprotect(二)

    首先要确保你所使用的gdb和gdbserver是配对的,最好(或必须)是sdk内相同platform(api level)下的gdb和gdbserver.否则你使用的gdb可能与运行测试机上的gdbs ...

  7. objc反汇编分析,block函数块为何物?

    上一篇向大家介绍了__block变量的反汇编和它的伪代码,本篇函数块block,通常定义成原型(^){},它在反汇编中是什么东西. 我们先定义将要反汇编的例子,为减少篇幅例子采用non-arc环境. ...

  8. C#解析XML之流模型-XMLTextReader类

    C#读取XML文档之XMLTextReader 类有一些构造程序来适应各种各样的情况,比如从一个已经存在的数据流或统一资源定位网址读取数据.最常见的是,你或许想从一个文件读取XML数据,那么也就有一个 ...

  9. 在阿里云服务器中配置JDK、tomcat、mysql

    阿里云服务器搭建配置 linux命令:参考:https://www.cnblogs.com/itdansan/p/8545187.html cat 文件名: 查看文件内容 ctrl+D : 退出查看 ...

  10. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...