Gameia HDU
来源:互联网 发布:尔雅网络课程明史十讲 编辑:程序博客网 时间:2024/05/29 19:58
一开始题目看见input里farther,完全没理解,后来看见admin说其实是father,但题目里也没修改,坑。。
还有就是切掉一条边,对节点无影响,只是bob无法将颜色染过去;
然后bob也只能涂空的节点,然后将直接用边连接的节点全变为黑的(一开始以为能涂在白色上)
比赛时莫名wa。。找不到原因,结束后看了数据结果我判断的是k 与 n / 2 的大小,实际上是k 与 n / 2 - 1 的大小。无语;
思路
1首先A如果选择端点附近的点,那么B必须染端点,所以能控制两个两个一起变黑,使vip功能失效,所以n如果是奇数,A必赢;
2如果n是偶数,A也可以通过选择端点,那b必须选择端点直接连接的点,且b必须使用功能;不然个数变成奇数,走上面那条;所以要比较k 与 n / 2 - 1 大小,判断功能次数是否足够
3如果次数足够,就要考虑 出现某个结点有>=2个子节点为叶子节点。A染这个点,B跟不上A的节奏,出现孤点,Ailice取胜;
我打的代码太繁琐了,所以贴一个简单又好理解的
http://blog.csdn.net/qq_37412229/article/details/77093330
#include <bits/stdc++.h>using namespace std;const int maxn=1000;int n, k, father[maxn], size[maxn];int main(){ int t; cin >> t; while(t --) { bool flag = true; cin >> n >> k; for(int i = 2; i <= n; ++ i) cin >> father[i]; for(int i = 1; i <= n; ++ i) size[i] = 1; for(int i = n; i >= 1; -- i) { if(size[i] >= 3) flag = false; size[father[i]] += size[i] & 1; } if(flag && n % 2 == 0 && k >= n / 2 - 1) cout << "Bob" << endl; else cout << "Alice" << endl; } return 0;}
阅读全文
0 0
- Gameia HDU
- HDU-Gameia
- hdu 6105 Gameia
- HDU 6105 Gameia
- HDU 6105 Gameia
- HDU-6105 Gameia
- HDU 6105 Gameia
- Gameia(HDU 6105)
- Gameia HDU 6105
- hdu 6105 Gameia
- hdu--6105--Gameia
- HDU 6015 Gameia【博弈】
- HDU 6105-Gameia
- HDU 6105 Gameia
- HDU 6105 Gameia 博弈
- HDU 6105 Gameia [想法题]
- hdu 6105 Gameia(树形DP)
- HDU 6105 Gameia【思维+博弈】
- cpuset参数说明
- Eclipse输入不了中文问题
- CSS中常用属性详解
- EXT.NET项目框架的搭建步骤
- Linux下Openssl的安装全过程
- Gameia HDU
- opencv11-计算不规则图像的质心
- 快速排序
- jdk安装
- Kubernetes系统架构简介
- SQL语句大全
- Java深入浅出——一维数组和二维数组在内存中的状态图
- awk 时间选取
- new和delete的用法