正题

题目链接: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函数】相关推荐

  1. Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)

    题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...

  2. 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]

    题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...

  3. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  4. 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题

    题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...

  5. hdu1848(sg函数打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: 1 #include <iostr ...

  6. AtCoder AGC043C Giant Graph (图论、SG函数、FWT)

    题目链接 https://atcoder.jp/contests/agc043/tasks/agc043_c 题解 场上感觉没啥思路就放弃了,场下想了十几分钟发现是水题,血亏...(只能怪自己计数水平 ...

  7. (转)博弈问题与SG函数

    博弈问题 若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需 ...

  8. NIM博弈+SG函数求解

    ICG 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负. 这个游戏可以认为是所有 Impartial Combinatorial Games 的 ...

  9. SG函数和SG定理(Sprague_Grundy)

    一.必胜点和必败点的概念 P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质:    ...

  10. Cow Digit Game(博弈论:sg函数)

    链接:https://ac.nowcoder.com/acm/contest/1071/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

最新文章

  1. linux 安装了tomcat 但是一直访问不了怎么办
  2. .NET中使用NLog记录日志
  3. Swift 获取渐变色颜色值
  4. 设置 webstorm 对 .vue 高亮
  5. Java 集合系列10: HashMap深入解析(1)
  6. redis序列化_SpringBoot整合redis
  7. J2EE实现发送邮件功能
  8. 经典SQL回顾之晋级篇
  9. Vue路由History模式分析
  10. 回归模型分类(自回归AR模型、向量自回归VAR模型等)
  11. 心理学家发现脚部动作可表现性格特征
  12. 使用基础node.js的express框架在连接数据库的过程中,出现Error: Cannot enqueue Handshake after invoking quit.的解决方案
  13. pcie握手机制_图解PCIE原理(从软件角度)
  14. linux grep命令使用详解
  15. 不正确的c语言字符常量是,哪个是不正确的字符常量?
  16. 那智机器人作业原点位置设定
  17. Linux 系统启动与服务管理
  18. 苹果终于入伙 WebRTC,新一代移动 Web 应用爆发路上还有哪些坑?
  19. TIKTOK海外直播公会如何申
  20. python创建一个空元组_如何在Python中从空元组创建元组?

热门文章

  1. 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...
  2. 件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发
  3. python训练词库_在Python中训练NGramModel
  4. 心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...
  5. java 数组 树_java使用顺序数组实现二叉树
  6. AcWing 126. 最大的和
  7. 线性代数---矩阵的各种问题求解方法
  8. Codeforces Beta Round #11 B. Jumping Jack 思维
  9. P4781 【模板】拉格朗日插值
  10. Codeforces Round #693 (Div. 3) E. Correct Placement 思维