2017多校第6场 HDU 6105 Gameia 博弈
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6105
题意:Alice和Bob玩一个游戏,喷漆!现在有一棵树上边的节点最开始都没有被染色。游戏规则是: 1,Alice和Bob只能选择未被染色的节点染色,Alice染色成白色,Bob为黑色 2. Alice最先开始 3. Bob有k次机会可以把树上的线段剪断 4. 最后树上有白色Alice胜利,否则是Bob胜利 5,Bob染色的时候,与他相邻的节点被强制染成黑色。
解法: 先考虑Alice胜利的情况:Alice如果胜利的话有两种可能
1,最后落点是Alice
2,游戏中间Alice就已经胜利了
证明1:对于第一种来说,肯定是奇数个,但是是否能实现呢?答案是可以的,对于节点个数为奇数的树,Alice每次染色给叶子节点的父亲,那么Bob肯定只能染色这个叶子节点,Bob将会失去k次的优势,最后的落点是Alice,树上存在了白点,Alice胜利。
证明2:考虑下面的图:

当Alice放在f位置的时候其儿子成为了孤立节点,Alice只要放上一个就必赢,所以只要存在这样的结构Alice就胜利,也就是一个节点的“儿子数量” >= 2 ,这种结构并不是简单的数量上大于等于2,而是儿子的个数必须要是奇数个比如:

就不行。但是下面这个可以

那么剩下的情况就是Bob一定胜利吗?不是的,Bob如果想胜利的话n一定是偶数,并且必须可以利用他的k次机会把节点分成n/2部分,每一部分都是两个节点,否则还是会输,因为Alice先开始优势太大,比如:k = 0的时候

Alice 染色c,Bob 染色b,那么a直接被染色,剩下Alice染色d胜利。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 550;
int head[maxn], edgecnt;
struct node{
int to,next;
}E[maxn*2];
void add(int u, int v){
E[edgecnt].to=v,E[edgecnt].next=head[u],head[u]=edgecnt++;
}
void init(){
memset(head,-1,sizeof(head));
edgecnt=0;
}
int sz[maxn];
bool flag;
void dfs(int u, int pre){
if(flag) return;
sz[u] = 1;
int ans = 0;
for(int i=head[u]; ~i; i=E[i].next){
int v = E[i].to;
if(v == pre) continue;
dfs(v, u);
sz[u] += sz[v];
if(sz[v]%2==1) ans++;
}
if(ans>=2) flag=1;
} int main()
{
int T,n,k;
scanf("%d", &T);
while(T--)
{
scanf("%d%d",&n,&k);
flag=0;
init();
for(int i=2; i<=n; i++){
int x;
scanf("%d", &x);
add(i, x);
add(x, i);
}
dfs(1,-1);
if(flag||n%2) printf("Alice\n");
else if(n/2-1>k) printf("Alice\n");
else printf("Bob\n");
}
return 0;
}
2017多校第6场 HDU 6105 Gameia 博弈的更多相关文章
- 2017多校第9场 HDU 6170 Two strings DP
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 题意:给了2个字符串,其中第2个字符串包含.和*两种特别字符,问第二个字符串能否和第一个匹配. ...
 - 2017多校第9场 HDU 6161 Big binary tree 思维,类似字典树
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6161 题意: 题目是给一棵完全二叉树,从上到下从左到右给每个节点标号,每个点有权值,初始权值为其标号, ...
 - 2017多校第9场 HDU 6169  Senior PanⅡ 数论,DP,爆搜
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...
 - 2017多校第10场 HDU 6181 Two Paths 次短路
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意:给一个图,求出次短路. 解法:我之前的模板不能解决这种图,就是最短路和次短路相等的情况,证 ...
 - 2017多校第10场 HDU 6180 Schedule 贪心,multiset
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6180 题意:给了一些任务的开始时间和终止时间,现在让我们安排k台及机器,让这些任务在k太机器上最小,并 ...
 - 2017多校第10场 HDU 6178 Monkeys 贪心,或者DP
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6178 题意:给出一棵有n个节点的树,现在需要你把k只猴子放在节点上,每个节点最多放一只猴子,且要求每只 ...
 - 2017多校第10场 HDU 6171 Admiral 双向BFS或者A*搜索
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6171 题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以 ...
 - 2017多校第10场 HDU 6172 Array Challenge 猜公式,矩阵幂
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6172 题意:如题. 解法: #include <bits/stdc++.h> using ...
 - 2017多校第9场 HDU 6162 Ch’s gift 树剖加主席树
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6162 题意:给出一棵树的链接方法,每个点都有一个数字,询问U->V节点经过所有路径中l < ...
 
随机推荐
- Codeforces Round #524 Div. 2 翻车记
			
A:签到.room里有一个用for写的,hack了一发1e8 1,结果用了大概600+ms跑过去了.惨绝人寰. #include<iostream> #include<cstdio& ...
 - Python替换字符串中的反斜杠\
			
s = 'cdp\nd' result = eval(repr(s).replace('\\', '@')) print(result) repr() 函数可以将字符串转换为python的原始字符串( ...
 - 个人vim配置
			
YouCompletMe支持golang cd .vim/bundle/YouCompleteMe ./install.sh --clang-completer --go-completer clan ...
 - BZOJ4873 [Shoi2017]寿司餐厅  【最大权闭合子图】
			
题目链接 BZOJ4873 题解 题意很鬼畜,就可以考虑网络流[雾] 然后就会发现这是一个裸的最大权闭合子图 就是注意要离散化一下代号 #include<algorithm> #inclu ...
 - webpack css压缩方案
			
css-loader原有的minimize选项在1.0.0版本已经移除,不能使用其进行css压缩. 目前可行的css压缩方案有: 1. postcss-loader with cssnano or u ...
 - 负载均衡配置(基于Nginx)
			
以下是基于nginx进行负载均衡配置的流程: 服务器配置如下: 1. 安装nginx的服务器:192.168.1.1 2. nginx配置负载均衡位置及端口:192.168.1.1 80端口 3. ...
 - Java中JAVA_HOME与CLASSPATH的解析(转)
			
很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让他大家设置JAVA_HOME环境变量,在开发程序的时候设置CLASSPATH环境变量,而很多 ...
 - Mybatis(3) 映射文件-增删改查
			
映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...
 - 解决SpringSecurity限制iframe引用页面的问题
			
使用Spring Security的过程中,需要使用iframe来引入其他域的页面,页面会报X-Frame-Options的错误,试了好几种方法一直未能很好的解决这个问题. 这里涉及到Spring S ...
 - Java中哈希表(Hashtable)是如何实现的
			
Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...