博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5996 dingyeye loves stone(博弈)
阅读量:5095 次
发布时间:2019-06-13

本文共 1054 字,大约阅读时间需要 3 分钟。

题目链接:

题意:

给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你当前的局面,问你能否赢

题解:

设根节点的深度为0,将所有深度为奇数的节点的石子数目xor起来,则先手必胜当且仅当这个xor和不为0。 证明同阶梯博弈。对于偶深度的点上的石子,若对手移动它们,则可模仿操作;对于奇深度上的石子,移动一次即进入偶深度的点。 时空复杂度O(n)

 

1 #include
2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 5 const int N=1e5+7; 6 vector
G[N]; 7 int a[N],ans,t,n,x; 8 9 void dfs(int u=0,int fa=0,int cnt=1)10 {11 int en=G[u].size()-1;12 F(i,0,en)if(G[u][i]!=fa)13 {14 if(cnt&1)ans^=a[G[u][i]];15 dfs(G[u][i],u,cnt+1);16 }17 }18 19 int main(){20 scanf("%d",&t);21 while(t--)22 {23 scanf("%d",&n);24 F(i,0,n)G[i].clear();25 F(i,1,n-1)26 {27 scanf("%d",&x);28 G[x].push_back(i);29 G[i].push_back(x);30 }31 F(i,1,n)scanf("%d",a+i-1);32 ans=0,dfs();33 if(ans==0)puts("lose");34 else puts("win");35 }36 return 0;37 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/6194089.html

你可能感兴趣的文章
理解熵公式
查看>>
asp.net 框架初接触
查看>>
XPTable 单元格怎么取值
查看>>
Poj 2186 Popular Cows
查看>>
文字向上滚动代码,带段落停顿
查看>>
关于取消的默认的Enter的keydown事件的疑问与解决
查看>>
云计算之路-阿里云上:重启 manager 节点引发 docker swarm 集群宕机
查看>>
上周热点回顾(9.13-9.19)
查看>>
[leetcode] integer break DP算法
查看>>
Altium designer知识总结
查看>>
Windows 7 Shell 命令大名单
查看>>
shell wc -l
查看>>
C#集合之不变的集合
查看>>
前端本质
查看>>
第一章 android系统移植与驱动开发概述
查看>>
php使用curl下载指定大小的文件
查看>>
Task 6.2冲刺会议九 /2015-5-22
查看>>
eclipse实现JavaWeb应用增量打包
查看>>
Java Web之Servlet入门篇(二)
查看>>
Master选举原理
查看>>