AGC 017D Game On Tree 博弈(Hackenbush删边)
来源:互联网 发布:.手机域名有多少人注册 编辑:程序博客网 时间:2024/06/05 04:17
题意:n个结点的树,Alice和Bob开始play,每次删除一条边,形成两连通分量,删除不包含1的那一个联通分量
不能操作的人算输,n<=1e5 Alice先手是否必胜?
参考
先考虑根结点只有一个分支时 SG(g)=SG(g')+1
要证明:g的后继状态的SG值为0~SG(g') 以树中结点个数作为阶段 归纳法证明
一个结点和两个结点显然成立,
去掉g-g'边得到SG(g)=0
去掉g'中的边 子树g'后继的SG为0~SG(g')-1,(包括g)最多有n-1个点,由归纳法SG(g)可以取1~SG(g')
不能操作的人算输,n<=1e5 Alice先手是否必胜?
参考
先考虑根结点只有一个分支时 SG(g)=SG(g')+1
要证明:g的后继状态的SG值为0~SG(g') 以树中结点个数作为阶段 归纳法证明
一个结点和两个结点显然成立,
去掉g-g'边得到SG(g)=0
去掉g'中的边 子树g'后继的SG为0~SG(g')-1,(包括g)最多有n-1个点,由归纳法SG(g)可以取1~SG(g')
综上SG(g)=SG(g')+1 .若根结点有多个分支,相当有nim中的每一堆异或即可.
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+20;int n,f[N];vector<int> e[N];void dfs(int u,int fa){f[u]=0;for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==fa) continue;dfs(v,u);f[u]^=(f[v]+1);}}int main(){while(cin>>n){for(int i=1;i<=n;i++)e[i].clear();int u,v;for(int i=1;i<=n-1;i++){scanf("%d%d",&u,&v);e[u].push_back(v);e[v].push_back(u);}dfs(1,0);if(f[1])puts("Alice");elseputs("Bob");}return 0;}
阅读全文
0 0
- AGC 017D Game On Tree 博弈(Hackenbush删边)
- AGC:D
- [agc017d]Game on Tree
- 博弈-Green Hackenbush(无向图删边)
- 博弈-Green Hackenbush(无向图删边)
- 博弈-Green Hackenbush(无向图删边)
- 博弈-Green Hackenbush(无向图删边)
- 博弈-Green Hackenbush(无向图删边)
- 博弈-Green Hackenbush(无向图删边)
- AGC 017
- [博弈] Codeforces Gym101190 NEERC2016G. Game on Graph
- bzoj 2688: Green Hackenbush (概率DP+博弈)
- CodeForces 280C Game on Tree 概率
- HackerRank - number-game-on-a-tree
- codeforces 280C Game on Tree
- 【HDU3094】A tree game 博弈,树形删边游戏
- 【博弈】【SG函数】【HUST 1612】A new tree game
- hdu3094—A tree game-(树形博弈)
- 为什么 window.location.search 为空?
- Redis原理(Replication、Sentinel、Twemproxy、RedisCluster)
- Json Web Token——JWT 笔记
- HDU 3552 I can do it!(贪心)
- redis实现发布订阅
- AGC 017D Game On Tree 博弈(Hackenbush删边)
- spring @value() 获取配置文件内容
- 走楼梯问题
- 监听软键盘 弹起 关闭
- VUE权威指南-第二章 数据绑定
- 安卓USB开发教程 <五> 安卓 AOA 1.0
- Hibernate中的Criteria
- 尺度空间理论
- mosquitto移植笔记