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. 考虑一个点对子树的合并,考虑下一个删的点在哪一个子树,那么剩下的状态实际上就是把一个子树所有能达 ...
随机推荐
- pyqt5
使用python爬虫需要使用webkit执行javascript,查找资料可使用pyqt5,在此记录下安装步骤 windows 安装pyqt5 操作webkit 可用版本 1. 下载python 3. ...
- Cruehead.1
查壳 没有 我拖 alt+F9 到上面 入口处 下断 关键跳 略过 就没了 要实现 强暴 直接过... 仔细来看看... 那两个调用 都下断 看看 判断 ...
- C# 的各种排序
http://www.cnblogs.com/jiajiayuan/category/302446.html
- The Swift Programming Language 英文原版官方文档下载
The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法(转载)
用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法 (MS SQL 2005) Windows server 2003,2008 Web.Config 配置连接sql ...
- 快速上手RaphaelJS-Instant RaphaelJS Starter翻译(一)
(目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/Instant_RaphaelJS_Start ...
- jdbc mysql写入中文乱码解决
一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ...
- 十分钟了解分布式计算:Spark
Spark是一个通用的分布式内存计算框架,本文主要研讨Spark的核心数据结构RDD的设计思路,及其在内存上的容错.内容基于论文 Zaharia, Matei, et al. "Resili ...
- Iso-Seq学习
SMRT portal安装教程: http://www.pacb.com/wp-content/uploads/2015/09/SMRT-Analysis-Software-Installation- ...
- Swift—泛型(上)
1.泛型 泛型是一种非常灵活的语法,允许程序在函数.枚举.结构体.类中定义类型形参,这种类型形参实际代表的类型是动态改变的——程序可以等到真正使用这些函数.枚举.结构体.类时才为这些类型形参传入实际的 ...