原文链接https://www.cnblogs.com/zhouzhendong/p/AGC017D.html

题目传送门 - AGC017D

题意

  给定一棵 n 个节点的以节点 1 为根的树。

  两个人在博弈,每次可以删除任意一个子树,不能删掉整个树。最终不能操作的人输。

  问先手是否必胜。

  $n\leq 10^5$

题解

  考虑处理出每一个节点的 SG 值。

  对于节点 x ,显然他的所有子树都是独立的,我们只需要求出所有子树的 SG 值然后异或起来就好了。

  假设 y 为 x 的一个儿子,则节点 y 对于 x 的贡献是什么呢?

  显然不是 SG[y] ,因为 x 到 y 还有一条边。在 y 子树中操作的任何时候都可以直接删除这条边到达状态 0 ,相当于 y 子树的所有状态都连了一条到 0 的边。

  所以 SG'[y] = SG[y] + 1 。

  所以 SG[x] 就是所有的 SG'[y] 的异或值(其中 y 为 x 的儿子)。

代码

#include <bits/stdc++.h>
#define y1 __zzd001
using namespace std;
typedef long long LL;
LL read(){
LL x=0;
char ch=getchar();
while (!isdigit(ch))
ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x;
}
const int N=100005;
int n,sg[N];
vector <int> e[N];
void solve(int x,int pre){
sg[x]=0;
for (auto y : e[x])
if (y!=pre){
solve(y,x);
sg[x]^=sg[y]+1;
}
}
int main(){
n=read();
for (int i=1;i<n;i++){
int x=read(),y=read();
e[x].push_back(y);
e[y].push_back(x);
}
solve(1,0);
puts(sg[1]?"Alice":"Bob");
return 0;
}

  

最新文章

  1. Java开发中的23种设计模式详解
  2. Mybatis关联查询(嵌套查询)
  3. table sorting&ndash;angularjs
  4. 用js动态生成css代码
  5. background-position百分比原理
  6. WLAN拓扑介绍-07
  7. Direct3D11学习:(一)开发环境配置
  8. JavaWeb学习记录(六)——用户登录功能之Cookie
  9. Linux多线程下载工具Axel
  10. (CodeForces 558C) CodeForces 558C
  11. Python 基础篇:字符编码、函数
  12. matlab中的三维坐标系与旋转
  13. LintCode-删除元素
  14. 利用Eclipse中的Maven构建Web项目(三)
  15. 好用的meta标签
  16. Python基础篇-day6
  17. mysql控制台出现“unknown column &#39;password&#39; in &#39;field list&#39;问题
  18. Python3 多线程编程(thread、threading模块)
  19. Spring对象生存周期(Scope)的分析
  20. Facebook 广告投放相关概念简介(1)

热门文章

  1. python学习第42、43天 HTML\CSS
  2. [PHP]一些坑
  3. VI编辑器、ipython、jupyter及进程知识总结
  4. swift 学习- 12 -- 方法
  5. 尚硅谷《全套Java、Android、HTML5前端视频》
  6. SpringMvc + Jsp+ 富文本 kindeditor 进行 图片ftp上传nginx服务器 实现
  7. Python1 简介及安装、基础
  8. Nginx的进程模型及高可用方案(OpenResty)
  9. laravel 迁移枚举
  10. cf自训6