BZOJ1777: [Usaco2010 Hol]rocks 石头木头
n<=10000的树,节点有初始石头数<=1000,进行这样的游戏:两人轮流行动,我先手,每次可以选一个节点(≠1)把不超过m<=1000个石头移到父亲,最后所有石头都在节点1,没法行动的算输。有T<=10000次修改操作,把某点初始石头数修改,求每次修改后能否先手胜。
突然发现博弈全忘光了。。
首先看:

最简单的一种情况,可以用SG函数表示二号点的情况。可以打表或手推或显然得出SG值:0 1 2 …… m 0 1 2 …… m …… SG(i)=i%(m+1)。
接着看并联情况:

这就是几个互不影响的游戏的组合,用SG定理,把SG值异或起来即可。
重点来了!串联的情况!
http://blog.csdn.net/longshuai0821/article/details/7793043 贴个阶梯博弈先

先不看四号和五号。如果在二号先手就必胜了,那么对手肯定不会甘于在二号点移动而是跑去三号点试图改变局面,但这是徒劳的:我可以把他移过来2号点的东西全部丢到一号点,从而毫不影响先手胜的局面,也就是三号对答案毫无影响。现在看四不看五,由于三号对答案无影响,四号应该发挥积极作用,也就是如果从四号拿了一些到三号,是会影响结果的,这等价于从四号点拿了一些石头丢掉了!因为三号点是没用点,有多少石头都无所谓!也就是说四号点和二号点两个互不影响地构成了这个游戏且规则相同。最后看五号点,如果对手把五号点丢给四号,那么我也可以把丢到四号的那些石头丢给三号。
综上,与根距离为偶数的点都是废点。所以只需要记录并更新距离是奇数的点SG值即可。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<iostream>
using namespace std; int n,t,m;
#define maxn 10011
struct Edge{int to,next;}edge[maxn<<];int first[maxn],le=;
void in(int x,int y) {Edge &e=edge[le];e.to=y;e.next=first[x];first[x]=le++;}
void insert(int x,int y) {in(x,y);in(y,x);}
int val[maxn],dep[maxn],ans;
void dfs(int x,int fa)
{
dep[x]=dep[fa]+;
if (dep[x]&) ans^=val[x];
for (int i=first[x];i;i=edge[i].next)
{
const Edge &e=edge[i];if (e.to==fa) continue;
dfs(e.to,x);
}
}
int calc(int x) {return x%(m+);}
int main()
{
scanf("%d%d%d",&n,&t,&m);
int x,y;
for (int i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
insert(x,i);
val[i]=calc(y);
}
dep[]=-;ans=;dfs(,);
for (int i=;i<=t;i++)
{
scanf("%d%d",&x,&y);
if (dep[x]&)
{
ans^=val[x];
val[x]=calc(y);
ans^=val[x];
}
printf(ans?"Yes\n":"No\n");
}
return ;
}
BZOJ1777: [Usaco2010 Hol]rocks 石头木头的更多相关文章
- 【博弈论】【SG函数】bzoj1777 [Usaco2010 Hol]rocks 石头木头
仅有距根节点为奇数距离的节点的石子被移走对答案有贡献,∵即使偶数的石子被移走,迟早会被再移到奇数,而奇数被移走后,不一定能够在移到偶数(到根了). 最多移L个:石子数模(L+1),比较显然,也可以自己 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 563 Solved: 216[Submi ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
[BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...
- 【BZOJ1776】[Usaco2010 Hol]cowpol 奶牛政坛 树的直径
[BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N. ...
- [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca
[Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...
- bzoj1779 [Usaco2010 Hol]Cowwar 奶牛战争(网络流)
1779: [Usaco2010 Hol]Cowwar 奶牛战争 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 302 Solved: 131[Sub ...
- BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡
首先我们列出转移矩阵$M$,$M_{i, j} = \frac {1 - \frac{p} {q}} {deg[i]}$(i,j之间有边)or $M_{i, j} = 0$(i,j之间没边) 则这个矩 ...
随机推荐
- Thymeleaf 在项目中的应用及前后端交互的一些知识(1)
经过一段时间的工作,我的第一个项目已经快要上线了.本篇文章介绍些thymeleaf在工作中的实际应用,但是更多的还是一些前端处理后台数据的一些思路,如果有什么不正确的地方,希望大家指点. 1.th:e ...
- 02html基础
02_html 1.几个标签 1.1 meta标签 meta标签的属性有name和http-equiv,其中name属性用于描述网页,对应于content(网页内容). <meta name=& ...
- Git-往返github和本地
将GitHub仓库Test弄到本地 本地新建文件夹Test 右击运行gitbash 在gitbash中输入git init 在github 仓库选择clone or download 复制链接http ...
- Android如何用阿里云的API进行身份证识别
准备工作:在libs下添加 alicloud-Android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.jar 在build.gradle添加 co ...
- 10个顶级的CSS3代码生成器
新出来的在线工具和web应用允许开发人员快速创建网站,而无需手动一行一行地编写代码.当前,不断有新的框架和代码库涌现在前端开发这个领域里. 但是,这也让许多开发人员忘记了代码生成器以及它们在构建网站时 ...
- QWidget标题栏双击事件
widget.h virtual bool event(QEvent *event); widget.cpp bool Widget::event(QEvent *event) { if (event ...
- vSphere Client用户名密码保存记录
vSphere Client在访问ESXi主机或vCenter后是默认不保存登录用户名和密码的,不过可以通过修改配置文件来保存,方便访问连接. 方法如下: 打开配置文件路径(实际安装路径):D:\Pr ...
- Python 访问字典(dictionary)中元素
访问python字典中元素的几种方式 一:通过“键值对”(key-value)访问: print(dict[key]) dict = {1: 1, 2: 'aa', 'D': 'ee', 'Ty': ...
- 制作SD更新系统时和用mfgtool工具烧录时,文件如何替换?
制作SD更新系统时和用mfgtool工具烧录时,文件如何替换? 答:制作SD更新系统时,请按照需求选择不同mfgimages-myd*文件夹.每个文件夹里面有一个Manifest文件, 里面规定了ub ...
- 手把手入门docker (好多图)
1.什么是docker? ---->我的理解是将许多应用一起打包成一个镜像,拿这个镜像去其他服务器上运行起来就可以.不需要单个单个去配置啦. 2.怎样在window下的安装. ---->刚 ...