2018.8.3图论博弈论(敦爷)

博弈论

有向图游走问题

带环版本

POJ2505

大于n必败 从n/9~n先手必胜 推到n/18~n/9必败,以此类推

取石子游戏

有n堆石子

阶梯博弈

整个游戏SG函数是所有奇数堆的SG异或
先手拿偶数堆的后手必定可以把对应的偶数堆也拿出来,那么奇数堆就不变了

#

相当于也是阶梯问题,每次移动会把一个空隙丢到另一个空隙

树删边问题

SG值就是没个子树的SG异或起来
每个子树内的SG值就是子节点的SG+1
然后异或起来

翻硬币问题

可以把每一个正面朝上的硬币看成一个独立的游戏
SG(X0XX0) = SG(X)+SG(00X)+SG(000X)
SG[X] = XOR(j=1~x-1) SG(j)

BZOJ1982

只有每种“个数”出现欧数次是先手必败
如果是有奇数个数字出现奇数次
排个序,把最后一个拿到,把前面的差补齐饥渴到先手必胜
偶数个的话,把首尾配对,中间两两配对,尾砍成首,补中间

BZOJ4347

暴力做法:
f[i][j][k]表示对于a[1]~a[i]扔掉个数%k=i,xor和=j
O(nkmax{a[i]})
对a进行特殊的排序:[2^10,2^11)、[2^9,2^10)…… (第一段根据a[i]的最大值来判断)
考虑背包,每一段做好,比如第一段做完,29位必定为0
O(\sum{a[i]} d)

图论

T1:删点

有向无环图
可以拓扑排序
最短路实际是在拓扑序列上往后跳
如果一个点被删了,考虑跳过他的那条边
ds[i]表示1~i
dt[i]表示i~t
对于每个点只要考虑覆盖他的边的ds[u]+dt[v]+w最小即可

扫描二维码关注公众号,回复: 2558620 查看本文章

T2:判断(有问题)

一个强连通分量里面答案相同
我们可以先缩点,就可以变成一个拓扑图
如果同一层有多个点的,那么这些点都不满足,反之都满足

T3:选择

把x[i]、y[i]连边
一个连通块里边数>点数就gg
反之相当于每条边选一个端点
所以只要判断每个连通块的边数和点数的关系

T4:网格图

前两天讲过.jpg

T5:边的染色

环的权为0可以转化为每个点的权为0/1
对于已经定好的边,把对应的点染色(类似二分图染色)
每个连通块的答案乘起来,最后还有除以2^{连通块个数}

T6:三元环

把点分成度数>\sqrt{m]和<\sqrt{m}
大点个数不会超过\sqrt{m}个
如果三元环没有小点
直接大力枚举大点,应为大点个数不会超过\sqrt{m}个
所以这部分复杂度为m\sqrt{m}
如果三元环有小点
枚举一个i,枚举i的两条出边,判断两个点是否有边相连
也是m\sqrt{m}

T7:选点游戏

猜你喜欢

转载自blog.csdn.net/a1035719430/article/details/81414215