MUV LUV UNLIMITED(树上博弈 奇偶性)
original link - http://acm.hdu.edu.cn/showproblem.php?pid=6741
题意:
给出一棵树,两个人轮流拿一些叶子,最后拿完的人赢。
解析:
- 单链情况下,由奇偶性决定。
- 考虑多出一个长度为1的分支时,我在取 x x x的同时可以选择 y y y的取留,也就决定了对手的奇偶性。
- 考虑复杂情况,假设所有个分支(从叶子往上第一个分叉)长度都是偶数,那么不管我怎么取,对手都可以跟着取,使得到我手上又是一个全偶状态。最后的到底的时候对手拿走最后一个,所以这种状态是必败态。否则只要存在奇数链,我取走所有奇数链,将全偶交给对面。
代码:
/** 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(树上博弈 奇偶性)相关推荐
- 2019CCPC秦皇岛 K MUV LUV UNLIMITED(思维博弈)
2019CCPC秦皇岛K 这个题感觉就是头脑风暴吧,关键在于抓住正确的方向想下去,我中间也跑偏了几次... 定义一个分支为从叶子往根的方向,不存在包含多个子节点的节点序列,即从叶子到包含多个子节点的节 ...
- K. MUV LUV UNLIMITED(树上博弈)
原题链接:K. MUV LUV UNLIMITED 题意: 给你一棵 n 个点以 1 为根的有根树.现在有两个人轮流操作,每次操作人可以选出至少1个叶子(没有儿子的点)删掉,无法操作的人失败.二者都是 ...
- 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)
MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 2019 China Collegiate Programming Contest Qinhuangdao K. MUV LUV UNLIMITED
MUV LUV UNLIMITED Link 题目大意:给出一棵树,两人轮流任取(至少取一)当前树上的叶子,最先不能操作的人输. 首先考虑一个情况,若一个叶子节点 x x x 有兄弟,则先手必胜.因为 ...
- MUV LUV UNLIMITED(ccpc 秦皇岛2019)
MUV LUV UNLIMITED(ccpc 秦皇岛2019) 题目描述 There are few entertainments in United Nations 11th Force, Paci ...
- 2019ccpc秦皇岛赛区K. MUV LUV UNLIMITED(博弈)
题目连接 题意:两个人在一棵树上玩游戏,两人轮流在树上选择一个以上的叶子进行删除.最后删掉根节点的人获胜,问是先手必胜还是后手必胜 (1).若只有一条链,则直接判奇偶(废话) (2).若不只一条链,则 ...
- 2019 CCPC秦皇岛 K.MUV LUV UNLIMITED(博弈)
2019CCPC秦皇岛K 题意: 两个人玩游戏, 有一棵有根树,每次只能拿叶子节点若干个(不能不拿),问最后谁会赢 思路: 先说结论,数每个叶子节点对应上去的那条链(直到他的父亲除自己外有另外的儿子结 ...
- HDU 6741 MUV LUV UNLIMITED (博弈论)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6741 题解 看完题解深刻地意识到自己是个智障. (1) 如果某个叶子节点的父亲有多于一个儿子,则为必胜 ...
- hdu6741 MUV LUV UNLIMITED
http://acm.hdu.edu.cn/showproblem.php?pid=6741 队友过的,说结论,如果某个叶子节点的父亲有多于1个的儿子节点,先手赢 如果全都是直接连向1的链,那么有一条 ...
最新文章
- Linux系统的大小端模式
- Zookeeper概念学习系列之分布式事务
- 京东共聚黑山县三方合力-农民丰收节·万祥军:谋定智慧农业
- 摩斯密码(加密/解密)脚本
- 达人探店小程序全套源码
- python turtle绘制七段数码管日期时间(注释)
- freebsd linux性能,为什么有人会选择FreeBSD而不是Linux?[关闭]
- 辐射校正:像元DN值—辐照度—表观反射率—地表反射率
- OPTEE CA和TA通信 实现从java到ca
- win10系统如何设置局域网服务器,win10系统设置局域网地址的操作方法
- 虚拟摄像头(拉rtsp流或桌面作为图像源)
- scikit-learn 线性回归算法库小结
- 中国互联网老总的经典妙语语录
- 高德地图zoom设置为小数
- 机器学习 K-Means(++)算法
- 微软培训和认证的建议
- 【SVR预测】基于matlab EMD优化SVR预测【含Matlab源码 1403期】
- Windows10 使用 Sony PHA-1 耳放
- machine learning : 最小二乘法之线性函数 --- python实现
- Pygame 教程(5):监测游戏时间