bzoj4730: Alice和Bob又在玩游戏
Description
#include<cstdio>
#include<cstring>
#include<algorithm>
const int N=;
int T,n,m;
int es[N*],enx[N*],e0[N],ed[N],ep=,f[N];
int sz[N*],ch[N*][],xt[N*],rt[N],p=;
void tag(int w,int h,int v){
if(w&&h>=&&v){
xt[w]^=v;
if(v>>h&)std::swap(ch[w][],ch[w][]);
}
}
void dn(int w,int h){
if(xt[w]){
tag(ch[w][],h-,xt[w]);
tag(ch[w][],h-,xt[w]);
xt[w]=;
}
}
int mex(int w){
int s=;
for(int i=,d;~i;--i){
dn(w,i);
if(sz[ch[w][]]==(<<i))w=ch[w][],s|=<<i;
else w=ch[w][];
}
return s;
}
int build(int x){
int rt=++p,w;
sz[w=rt]=;
for(int i=;~i;--i)sz[w=ch[w][x>>i&]=++p]=;
return rt;
}
int merge(int a,int b,int h){
if(!a||!b)return a|b;
dn(a,h);dn(b,h);
ch[a][]=merge(ch[a][],ch[b][],h-);
ch[a][]=merge(ch[a][],ch[b][],h-);
sz[a]=h>=?sz[ch[a][]]+sz[ch[a][]]:;
return a;
}
void dfs(int w,int pa){
ed[w]=;
int x=;
for(int i=e0[w],u;i;i=enx[i]){
u=es[i];
if(u!=pa){
dfs(u,w);
x^=f[u];
}
}
for(int i=e0[w],u;i;i=enx[i]){
u=es[i];
if(u!=pa){
tag(rt[u],,x);
rt[w]=merge(rt[w],rt[u],);
}
}
rt[w]=merge(rt[w],build(x),);
f[w]=mex(rt[w]);
tag(rt[w],,f[w]);
}
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int main(){
for(T=_();T;--T){
if(p){
memset(ch,,sizeof(ch[])*(p+));
memset(sz,,sizeof(int)*(p+));
memset(xt,,sizeof(int)*(p+));
p=;
}
n=_();m=_();
for(int i=;i<=n;++i)e0[i]=ed[i]=f[i]=rt[i]=;
ep=;
for(int i=,a,b,c;i<m;++i){
a=_();b=_();
es[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
}
for(int i=;i<=n;++i)if(!ed[i]){
dfs(i,);
f[]^=f[i];
}
puts(f[]?"Alice":"Bob");
}
return ;
}
bzoj4730: Alice和Bob又在玩游戏的更多相关文章
- [UOJ266]Alice和Bob又在玩游戏
[UOJ266]Alice和Bob又在玩游戏 Tags:题解 作业部落 评论地址 TAG:博弈 题意 不同于树的删边游戏,删掉一个点删去的是到根的路径 题解 这题只和计算\(SG\)有关,博弈的有关内 ...
- UOJ #266 【清华集训2016】 Alice和Bob又在玩游戏
题目链接:Alice和Bob又在玩游戏 这道题就是一个很显然的公平游戏. 首先\(O(n^2)\)的算法非常好写.暴力枚举每个后继计算\(mex\)即可.注意计算后继的时候可以直接从父亲转移过来,没必 ...
- uoj266[清华集训2016]Alice和Bob又在玩游戏(SG函数)
uoj266[清华集训2016]Alice和Bob又在玩游戏(SG函数) uoj 题解时间 考虑如何求出每棵树(子树)的 $ SG $ . 众所周知一个状态的 $ SG $ 是其后继的 $ mex $ ...
- [BZOJ4730][清华集训2016][UOJ266] Alice和Bob又在玩游戏
题意:俩智障又在玩游戏.规则如下: 给定n个点,m条无向边(m<=n-1),保证无环,对于每一个联通块,编号最小的为它们的根(也就是形成了一片这样的森林),每次可以选择一个点,将其本身与其祖先全 ...
- 【bzoj4730】 Alice和Bob又在玩游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=4730 (题目链接) 题意 给出一个森林,两个人轮流操作,每次把一个节点以及它的祖先全部抹去,无节点可 ...
- uoj#266. 【清华集训2016】Alice和Bob又在玩游戏(博弈论)
传送门 完了我连sg函数是个啥都快忘了 设\(sg[u]\)为以\(u\)为根节点的子树的\(sg\)函数值,\(rem[u]\)表示\(u\)到根节点的路径删掉之后剩下的游戏的异或值 根节点\(u\ ...
- UOJ 266 - 【清华集训2016】Alice和Bob又在玩游戏(SG 定理+01-trie)
题面传送门 神仙题. 首先注意到此题的游戏是一个 ICG,故考虑使用 SG 定理解决这个题,显然我们只需对每个连通块计算一遍其 SG 值异或起来检验是否非零即可.注意到我们每删除一个点到根节点的路径后 ...
- UOJ#266. 【清华集训2016】Alice和Bob又在玩游戏 博弈,DSU on Tree,Trie
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ266.html 题解 首先我们可以直接暴力 $O(n^2)$ 用 sg 函数来算答案. 对于一个树就是枚举 ...
- 【清华集训2016】Alice和Bob又在玩游戏
不难的题目.因为SG性质,所以只需要对一棵树求出. 然后如果发现从上往下DP不太行,所以从下往上DP. 考虑一个点对子树的合并,考虑下一个删的点在哪一个子树,那么剩下的状态实际上就是把一个子树所有能达 ...
随机推荐
- js 闭包演示
function test2() { var scope = "global scope"; var f = enclose(scope); scope = 'aaa'; aler ...
- Jmeter增加压力机方法
windows: 需要别人的机器也安装jmeter 在别人的机器上运行jmeter-server.bat 修改jmeter.properties文件,查找remote_hosts 原始:remote_ ...
- 黑马------synchronized详解
黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA线程-synchronized详解 一.synchronized概述 1.线程间实现互斥,必须使用同一个监视器(一个对象 ...
- 必须掌握的八个cmd 命令
一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它 所利用的原理是这样的:网络上的机器都有唯一确定的I ...
- Swift---- 可选值类型(Optionals) 、 断言(Assertion) 、 集合 、 函数
1 使用数组实现九宫格 1.1 问题 Swift提供经典的数组和字典两种集合类型来存储集合数据.本案例使用数组实现一个九宫格程序,如图-1所示: 图-1 1.2 方案 九宫格就是有一个n行n列的方格, ...
- MySQL 配置
MySQL 配置 1.服务启动: (1)使用 service 启动:service mysqld start (2)使用 mysqld 脚本启动:/etc/inint.d/mysqld start ( ...
- JDBC连接数据库(PreparedStatement)
PreparedStatement是在数据库端防止SQL注入漏洞的SQL方法这里演示了一些基本使用方法同样使用Oracle数据库,之前已经手动建立了一张t_account表数据库代码参见上一篇< ...
- 测试加载jquery
Hello world! <h1 id="main-heading">Hello world!</h1> <p><img onclick= ...
- 解决1130 Host 'localhost' is not allowed to connect to this MySQL server
- Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!)
Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装 ...