HDU6105Gameia(博弈+图)
来源:互联网 发布:heroku绑定域名 编辑:程序博客网 时间:2024/06/16 11:10
#include <iostream>#include <cstdio>#include <vector>#include <cstring>using namespace std;/*博弈+图给定一个树,对空节点进行染色,数有n个节点,根为1Bob有k次删边的机会,Bob选择一个空节点染色(黑色),他的儿子节点也会被染黑Alice可以任选一个空节点染色(白色) 如果有白色点则Alice赢,否则Bob赢。*/const int maxn=500+10;vector<int>G[maxn];int n,k;int flag;//出现某个结点有>=2个子节点为叶子节点。Alice染这个点,//Bob跟不上Alice的节奏,出现孤点,Ailice取胜int dfs(int u){ int cnt=0; for(int i=0;i<G[u].size();i++) { cnt+=dfs(G[u][i]); if(cnt>=2) flag=0; } if(G[u].size()==0) return 1;//叶子节点 return 0;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&k); for(int i=1;i<=n;i++) { G[i].clear(); } int u; flag=1; for(int i=2;i<=n;i++) { scanf("%d",&u); G[u].push_back(i); } if(n==2)//只有两个空节点 { printf("Bob\n"); continue; } if(n&1)//奇数个节点,原树不存在两两匹配的方案 { printf("Alice\n"); continue; } if(k<n/2-1)//原树存在两两匹配的方案,而Bob的小动作不足以把树分成两两的点对 { printf("Alice\n"); continue; } dfs(1); if(flag) { printf("Bob\n"); } else//出现某个结点有>=2个子节点为叶子节点 { printf("Alice\n"); } } return 0;}
阅读全文
0 0
- HDU6105Gameia(博弈+图)
- 博弈入门---(巴什博弈,威佐夫博弈,nim博弈)
- 图博弈,树上删边博弈
- 人机博弈之(一)------博弈介绍
- 人机博弈之(一)------博弈介绍
- (博弈)Public SaleHDU2149(巴什博弈)
- 【博弈】hdu1850 && hdu2176 (尼姆博弈)
- [POJ](2975)Nim ---Nim博弈(博弈)
- bzoj 4131: 并行博弈(博弈)
- 2017多校联合第6次hdu6105Gameia
- 二分图博弈
- 经典博弈(转)
- (转)博弈
- 【POJ2975】Nim (博弈)
- hdu1527(博弈问题)
- POJ-2505(博弈)
- 博弈 (转)
- 随笔(博弈)
- centos7安装dos2unix
- IDEA spring-boot启动本地调试
- Android BLE的总结-概念篇
- Misha and Forest CodeForces
- [UVA
- HDU6105Gameia(博弈+图)
- Java框架之hibernate(3)
- virtualenv在Ubuntu16.04(64位)中的用法(命令和图形化建立虚拟环境)
- 一个img文件-实验吧
- 阿里云搭建Gogs
- 集中式工程拆解为分布式(微服务)需要注意的一些事情
- 欢迎使用CSDN-markdown编辑器
- ssh免密码登录
- JVM对象的栈上分配