AT2667-[AGC017D]Game on Tree【SG函数】
正题
题目链接:https://www.luogu.com.cn/problem/AT2667
题目大意
给出nnn个点的一棵树,每次可以割掉一条和根节点联通的边,轮流操作直到不能操作的输,求是否先手必胜。
1≤n≤2×1051\leq n\leq 2\times 10^51≤n≤2×105
解题思路
挺巧妙的一个东西,考虑通过每个子树的SGSGSG来求根的SGSGSG。
考虑一个等价的问题就是假设我们有kkk个子树那么我们可以把根节点复制kkk份然后每个单独连接。
然后考虑我们知道了一棵树的SGSGSG然后往上加一个节点时新的SGSGSG是多少。
用DAGDAGDAG来考虑的话不难发现我们其实是多了一个节点并且连向所有的状态,所以新的SGSGSG值加一就好连。
所以每个点子树的SGSGSG就等于他儿子节点子树的SG+1SG+1SG+1的异或和
时间复杂度O(n)O(n)O(n)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
struct node{int to,next;
}a[N<<1];
int n,tot,ls[N],sg[N];
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(int x,int fa){for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;dfs(y,x);sg[x]^=sg[y]+1;}return;
}
int main()
{scanf("%d",&n);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dfs(1,1);if(sg[1])puts("Alice");else puts("Bob");return 0;
}
AT2667-[AGC017D]Game on Tree【SG函数】相关推荐
- Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)
题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...
- 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]
题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MB Submit: 871 Solved: 365 [Submit][Status][Discuss] Descripti ...
- 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...
- hdu1848(sg函数打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: 1 #include <iostr ...
- AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
题目链接 https://atcoder.jp/contests/agc043/tasks/agc043_c 题解 场上感觉没啥思路就放弃了,场下想了十几分钟发现是水题,血亏...(只能怪自己计数水平 ...
- (转)博弈问题与SG函数
博弈问题 若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需 ...
- NIM博弈+SG函数求解
ICG 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负. 这个游戏可以认为是所有 Impartial Combinatorial Games 的 ...
- SG函数和SG定理(Sprague_Grundy)
一.必胜点和必败点的概念 P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质: ...
- Cow Digit Game(博弈论:sg函数)
链接:https://ac.nowcoder.com/acm/contest/1071/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...
最新文章
- linux 安装了tomcat 但是一直访问不了怎么办
- .NET中使用NLog记录日志
- Swift 获取渐变色颜色值
- 设置 webstorm 对 .vue 高亮
- Java 集合系列10: HashMap深入解析(1)
- redis序列化_SpringBoot整合redis
- J2EE实现发送邮件功能
- 经典SQL回顾之晋级篇
- Vue路由History模式分析
- 回归模型分类(自回归AR模型、向量自回归VAR模型等)
- 心理学家发现脚部动作可表现性格特征
- 使用基础node.js的express框架在连接数据库的过程中,出现Error: Cannot enqueue Handshake after invoking quit.的解决方案
- pcie握手机制_图解PCIE原理(从软件角度)
- linux grep命令使用详解
- 不正确的c语言字符常量是,哪个是不正确的字符常量?
- 那智机器人作业原点位置设定
- Linux 系统启动与服务管理
- 苹果终于入伙 WebRTC,新一代移动 Web 应用爆发路上还有哪些坑?
- TIKTOK海外直播公会如何申
- python创建一个空元组_如何在Python中从空元组创建元组?
热门文章
- 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...
- 件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发
- python训练词库_在Python中训练NGramModel
- 心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...
- java 数组 树_java使用顺序数组实现二叉树
- AcWing 126. 最大的和
- 线性代数---矩阵的各种问题求解方法
- Codeforces Beta Round #11 B. Jumping Jack 思维
- P4781 【模板】拉格朗日插值
- Codeforces Round #693 (Div. 3) E. Correct Placement 思维