original link - http://acm.hdu.edu.cn/showproblem.php?pid=6741

题意:

给出一棵树,两个人轮流拿一些叶子,最后拿完的人赢。

解析:

  1. 单链情况下,由奇偶性决定。
  2. 考虑多出一个长度为1的分支时,我在取 x x x的同时可以选择 y y y的取留,也就决定了对手的奇偶性。
  3. 考虑复杂情况,假设所有个分支(从叶子往上第一个分叉)长度都是偶数,那么不管我怎么取,对手都可以跟着取,使得到我手上又是一个全偶状态。最后的到底的时候对手拿走最后一个,所以这种状态是必败态。否则只要存在奇数链,我取走所有奇数链,将全偶交给对面。


代码:

/**  Author : Jk_Chen*    Date : 2019-09-28-19.27.44*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define rep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)
#define per(i,a,b) for(int i=(int)(a);i>=(int)(b);i--)
#define mmm(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pill pair<int, int>
#define fi first
#define se second
#define debug(x) cerr<<#x<<" = "<<x<<'\n';
const LL mod=1e9+7;
const int maxn=1e6+9;
const int inf=0x3f3f3f3f;
LL rd(){ LL ans=0; char last=' ',ch=getchar();while(!(ch>='0' && ch<='9'))last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans; return ans;
}
#define rd rd()
/*_________________________________________________________begin*/
#define rep_e(i,p,u) for(int i=head[p],u=to[i];i;i=nex[i],u=to[i])
int head[maxn],to[maxn<<1],nex[maxn<<1],now;
void add(int a,int b){nex[++now]=head[a];head[a]=now;to[now]=b;
}
void init_edge(){memset(head,0,sizeof head);now=0;
}
/*_________________________________________________________edge*/
int win;
int son[maxn];void dfs(int p,int len){if(son[p]==0){if(len%2)win=1;return;}if(son[p]==1){rep_e(i,p,u){dfs(u,len+1);}}else{rep_e(i,p,u){dfs(u,1);}}
}int main(){int t=rd;while(t--){mmm(son,0);int n=rd;win=0;init_edge();bool d=1;rep(i,2,n){int f=rd;add(f,i);son[f]++;if(son[f]>1)d=0;}dfs(1,1);if(win)puts("Takeru");else puts("Meiya");}return 0;
}/*_________________________________________________________end*/

MUV LUV UNLIMITED(树上博弈 奇偶性)相关推荐

  1. 2019CCPC秦皇岛 K MUV LUV UNLIMITED(思维博弈)

    2019CCPC秦皇岛K 这个题感觉就是头脑风暴吧,关键在于抓住正确的方向想下去,我中间也跑偏了几次... 定义一个分支为从叶子往根的方向,不存在包含多个子节点的节点序列,即从叶子到包含多个子节点的节 ...

  2. K. MUV LUV UNLIMITED(树上博弈)

    原题链接:K. MUV LUV UNLIMITED 题意: 给你一棵 n 个点以 1 为根的有根树.现在有两个人轮流操作,每次操作人可以选出至少1个叶子(没有儿子的点)删掉,无法操作的人失败.二者都是 ...

  3. 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)

    MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  4. 2019 China Collegiate Programming Contest Qinhuangdao K. MUV LUV UNLIMITED

    MUV LUV UNLIMITED Link 题目大意:给出一棵树,两人轮流任取(至少取一)当前树上的叶子,最先不能操作的人输. 首先考虑一个情况,若一个叶子节点 x x x 有兄弟,则先手必胜.因为 ...

  5. MUV LUV UNLIMITED(ccpc 秦皇岛2019)

    MUV LUV UNLIMITED(ccpc 秦皇岛2019) 题目描述 There are few entertainments in United Nations 11th Force, Paci ...

  6. 2019ccpc秦皇岛赛区K. MUV LUV UNLIMITED(博弈)

    题目连接 题意:两个人在一棵树上玩游戏,两人轮流在树上选择一个以上的叶子进行删除.最后删掉根节点的人获胜,问是先手必胜还是后手必胜 (1).若只有一条链,则直接判奇偶(废话) (2).若不只一条链,则 ...

  7. 2019 CCPC秦皇岛 K.MUV LUV UNLIMITED(博弈)

    2019CCPC秦皇岛K 题意: 两个人玩游戏, 有一棵有根树,每次只能拿叶子节点若干个(不能不拿),问最后谁会赢 思路: 先说结论,数每个叶子节点对应上去的那条链(直到他的父亲除自己外有另外的儿子结 ...

  8. HDU 6741 MUV LUV UNLIMITED (博弈论)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6741 题解 看完题解深刻地意识到自己是个智障. (1) 如果某个叶子节点的父亲有多于一个儿子,则为必胜 ...

  9. hdu6741 MUV LUV UNLIMITED

    http://acm.hdu.edu.cn/showproblem.php?pid=6741 队友过的,说结论,如果某个叶子节点的父亲有多于1个的儿子节点,先手赢 如果全都是直接连向1的链,那么有一条 ...

最新文章

  1. Linux系统的大小端模式
  2. Zookeeper概念学习系列之分布式事务
  3. 京东共聚黑山县三方合力-农民丰收节·万祥军:谋定智慧农业
  4. 摩斯密码(加密/解密)脚本
  5. 达人探店小程序全套源码
  6. python turtle绘制七段数码管日期时间(注释)
  7. freebsd linux性能,为什么有人会选择FreeBSD而不是Linux?[关闭]
  8. 辐射校正:像元DN值—辐照度—表观反射率—地表反射率
  9. OPTEE CA和TA通信 实现从java到ca
  10. win10系统如何设置局域网服务器,win10系统设置局域网地址的操作方法
  11. 虚拟摄像头(拉rtsp流或桌面作为图像源)
  12. scikit-learn 线性回归算法库小结
  13. 中国互联网老总的经典妙语语录
  14. 高德地图zoom设置为小数
  15. 机器学习 K-Means(++)算法
  16. 微软培训和认证的建议
  17. 【SVR预测】基于matlab EMD优化SVR预测【含Matlab源码 1403期】
  18. Windows10 使用 Sony PHA-1 耳放
  19. machine learning : 最小二乘法之线性函数 --- python实现
  20. Pygame 教程(5):监测游戏时间

热门文章

  1. java调用jasperreport_Java代码导出Jasperreport
  2. 条件分布函数(离散-条件分布律)
  3. Stream.iterate
  4. 英汉习语文化差异及翻译
  5. 基于C#+VisualStudio winform 图书管理系统
  6. vnc远程控制linux密码,使用VNC实现LINUX与windows的相互远程控制
  7. Vue之router学习
  8. Android 使用iperf测试wifi吞吐量
  9. Apache Pulsar基本理论
  10. 【面试】中级前端面试题记录及答案总结