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之间没边) 则这个矩 ...
随机推荐
- CF779C(round 402 div.2 C) Dishonest Sellers
题意: Igor found out discounts in a shop and decided to buy n items. Discounts at the store will last ...
- 网页尺寸scrollHeight/offsetHeight
scrollHeight和scrollWidth,获取网页内容高度和宽度. 一.针对IE.Opera: scrollHeight 是网页内容实际高度,可以小于 clientHeight. 二.针对NS ...
- Qt中为QPushButton添加背景图片
有2种方式,一种是在代码中设置,另外一种是直接在Qt Creator中直接设置,下面是第二种 参考: http://doc.qt.io/qt-4.8/stylesheet-examples.html ...
- 位bit,字节byte,K,M,G(转)
字节是由8个位所组成,可代表一个字符(A~Z).数字(0~9).或符号(,.?!%&+-*/),是内存储存数据的基本单位.1 byte = 8 bit 1 KB = 1024 bytes1 ...
- Android(java)学习笔记167:横竖屏切换时Activity的生命周期
1.横竖屏切换的生命周期 默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...
- swift 泛型的类型约束
总结: 1.类型约束只能添加到泛型参量上面 2.关联类型是泛型参量: 3.关联类型可以通过 协议.关联类型名称的形式引用: func allItemsMatch<C1: Container, C ...
- VC++绘制金刚石(MFC)
void CTxx1View::OnDraw(CDC* pDC){ CTxx1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add d ...
- JS concat() 方法
[数组元素的合并] 一. concat() 方法 concat() 方法用于连接两个或多个数组. 返回一个新的数组.该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的.如果 ...
- CentOS 6.5下安装Python 3.5.2(与Python2并存)
CentOS 6.5下安装Python 3.5.2(与Python2并存) 安装步骤 1,准备编译环境(环境不对,在安装过程中可能遇到各种问题.比如wget无法下载链接的文件) yum groupin ...
- es6数组新特性
1.Array.from 从类数组和可遍历对象中创建Array的实例 类数组对象包括:函数中的arguments.由document.getElementsByTagName()返回的nodeList ...