HDU 6741 树上删叶子节点博弈
假设现在有一颗树A
我们在他非叶子节点上加一个点变成树B 则此时树B必为先手必胜
假设A为先手必胜 则先手直接把加入的点一同删去
假设A为先手必败 则先手可以只删加入的点 与后手位置互换 把必败态留给后手
所以只要有一个非叶子节点连着一个叶子节点(叶子节点父亲的度数>2) 此时的树为先手必胜
排除掉这种必胜情况 剩下的就是每个叶子节点的父亲度数都为2的情况
则我们可以计算每个叶子到他第一个度数>2的祖先的长度 如果所有这些长度都为偶数的话 那么是后手必胜
策略是这样的: 我们定义叶子节点到他第一个度数>2的祖先路上的经过的节点和边为'链'
假设先手这次拿了集合为S的链上的叶子节点 那么后手也拿集合为S的链上的叶子节点 这样每条链的长度还是偶数 直到有一条链他只剩一个节点直接转换为上面的必胜情况
如果有一条链是奇数的话 就是先手必胜 因为先手直接把所有链拿成偶数就可以和后手位置互换 把必败态留给后手
#include<bits/stdc++.h>
using namespace std;
int fa[];
vector<int> G[], yezi;
int du[], Size[];
int main() {
int T;
scanf("%d", &T) ;
while (T--) {
int n, x;
scanf("%d", &n);
yezi.clear();
for (int i = ; i <= n; i++) {
Size[i] = du[i] = ;
G[i].clear();
}
for (int i = ; i <= n; i++) {
scanf("%d", &x);
fa[i] = x;
du[x]++;
Size[x]++;
}
for (int i = ; i <= n; i++) {
if (du[i] == ) {
yezi.push_back(i);
}
}
bool flag = ;
for (int v : yezi) {
int father = fa[v];
if (Size[father] >= ) {
flag = ;
break;
}
int cnt = ;
while (Size[fa[v]] == ) {
cnt++;
v = fa[v];
}
if (cnt & ) {
flag = ;
break;
}
}
if (flag) {
printf("Takeru\n");
} else {
printf("Meiya\n");
}
}
return ;
}
HDU 6741 树上删叶子节点博弈的更多相关文章
- HDU 3094 树上删边 NIM变形
基本的树上删边游戏 写过很多遍了 /** @Date : 2017-10-13 18:19:37 * @FileName: HDU 3094 树上删边 NIM变形.cpp * @Platform: W ...
- 【HDU 3590】 PP and QQ (博弈-Anti-SG游戏,SJ定理,树上删边游戏)
PP and QQ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 5299 圆扫描线 + 树上删边
几何+博弈的简单组合技 给出n个圆,有包含关系,以这个关系做游戏,每次操作可以选择把一个圆及它内部的圆全部删除,不能操作者输. 圆的包含关系显然可以看做是树型结构,所以也就是树上删边的游戏. 而找圆的 ...
- HDU5299 圆的扫描线 && 树上删边博弈
HDU5299 圆的扫描线 && 树上删边博弈 标签(空格分隔): 未分类 给出若干个圆,可以互相嵌套但不相交或相切. 每次删去一个圆和它内部的圆,进行博弈,问谁赢. 分成两部分.首先 ...
- HDU 1524 树上无环博弈 暴力SG
一个拓扑结构的图,给定n个棋的位置,每次可以沿边走,不能操作者输. 已经给出了拓扑图了,对于每个棋子找一遍SG最后SG和就行了. /** @Date : 2017-10-13 20:08:45 * @ ...
- 【BZOJ 2688】 2688: Green Hackenbush (概率DP+博弈-树上删边)
2688: Green Hackenbush Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 42 Solved: 16 Description ...
- HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
题意: n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间 (u点要计算)每隔k个位置,该数字+add 2 pos 询问 pos下标的值(下标从1开始) 思路 ...
- hdu 2196 叶子节点最长距离(树DP)
http://www.cnblogs.com/kuangbin/archive/2012/08/28/2659915.html 求每个节点到叶子节点的最长距离 需要保存每个节点到叶子节点距离的最大值和 ...
- HDU 2196 Computer(求树上每一个节点到其他点的最远距离)
解题思路: 求出树的直径的两个端点.则树上每一个节点到其它点的最远距离一定是到这两个端点的距离中最长的那一个. #include <iostream> #include <cstri ...
随机推荐
- charles 新的修改请求
本文参考:charles 新的修改请求 compose New 是新出一个弹窗,自己手动一个个的去写: 可以写各种状态: – URL: – Method: – GET – POST – PUT – D ...
- solr8.0创建core,报Can't find resource 'solrconfig.xml
出现这个问题,主要是因为没有找到对应的配置文件, 只需要将solr_home\configsets\_default\conf下的配置文件,拷贝到自己新建的core文件夹下即可解决问题!
- xmind常用快捷键
1-新建导图Ctrl+shift+N2-编辑文字空格键3-插入图片Ctrl+i4-插入主题Enter键5-插入主题之前Shift+Enter键6-插入子主题Tab键7-放大导图“Ctrl”+“+”,先 ...
- [转帖]Swagger介绍及使用
Swagger介绍及使用 32018.12.07 01:39:21字数 2241阅读 89207 https://www.jianshu.com/p/349e130e40d5 导语: 相信无论是前端还 ...
- Java面试题代码篇
1.统计字符串中的各种字符的个数并对其排序 package JavaMianSiTest; public class TongJIZiFu { public static void main(Stri ...
- java读写cookie中文乱码解决方法
1.写入的时候: public boolean addCookie( HttpServletRequest req, HttpServletResponse resp){ //创建 Cookie co ...
- C++中静态成员函数和普通成员函数存储方式相同
先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别. #include "stdafx.h" #include<iostream> #include& ...
- 2019CCPC网络赛——array(权值线段树)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6703 题目大意: 给出一个n(n<1e5)个元素的数组A,A中所有元素都是不重复的[1,n]. 有 ...
- python day1 (afternoon)购物清单
购物清单 #顾客给出余额 #给出商品清单 #顾客挑选商品 #给出购物清单 代码: #!/usr/bin/env python#-*- coding:utf-8 -*- salary = int(inp ...
- WUSTOJ 1279: Wallace and His Pet(Java)
1279: Wallace and His Pet 题目 给出一句话(英文),单词总数不超过1000,每个单词不超过10个字符,一句话只有一个唯一的字符"."(句点).将这句话 ...