20210712博弈论&树分治杂题
昨天就到诸暨了,轿车 → \to → 飞机 → \to → 大巴,路上花了五个小时。
两点钟到海高就被拉去打美团杯了,然而由于奔波了整个上午,我们的黄队直接累的下线了。剩我和官聚聚在机房水了美团杯,到五点也滚去吃饭了。喜闻乐见最后没进滚榜,,没话说,这么极限的时间,你还想怎样?(虽然但是就是很不甘心啊
今天凌晨三点有欧洲杯的决赛,直播是不可能看的,恭喜意大利夺冠!
上午是彭思进大佬的讲课 博弈&树分治 ,相比pb大师的劝退式讲课法,彭ls的体验感就好多了,还很贴心地问了大家有没有听懂。
关于博弈论
从来没有系统的学过博弈论,但是做过这么多考试里面的博弈题,连蒙带猜地搞到过不少分,勉勉强强算是入了个门。
但具体到博弈的考点,额,我不知道有什么考点,我只会猜。
博弈论的常见考点:Nim 、公平游戏组合与 SG 函数; Nim 变种(阶梯 Nim、Anti-Nim、树上 Nim……); 经典游戏模型(威佐夫、无向图删点、K-减法……)
之前做过的博弈论题的话,我想可能只有历次模拟赛的jiangly场的T3了,额,算了,补不动。
接下来是今天的杂题。
Gym102361K
题意:两人轮流取当前树的叶子的集合,取不动的就输了,问先手有没有必胜策略。
分析:博弈里面有个技巧叫模仿,先假设若先手取了某一个叶子,并且没有产生新的叶子。
若此时的局面变成了必败,那显然先手必胜。
若此时的局面变成了必胜,那么后手下一步取了一些叶子后,局面又会是必败。此时我们让先手第一次就取掉这些叶子,那又是先手必胜了。
如果不存在取了某一个叶子同时不产生新的叶子,说明每一个叶子都在一条独立的链上,设这些链长为 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an ,新的问题变成了两人轮流可以将一些 a i a_i ai 减一,先减到 0 0 0 的人取胜。
这个问题是先手必胜的,因为先手只每次操作完所有 a i a_i ai 都是偶数就可以保证取胜。
LOJ6558
题意:给定 N N N 堆石子,两人轮流操作,先手每次可以从一堆中取至多 A A A 个石子,后者每次可以从一堆中取至多 B B B 个石子,判断先手能否取胜
分析:分情况讨论
- A = B A=B A=B 时,就是一个nim游戏,每一堆石子是独立,SG 函数为 a i m o d ( A + 1 ) a_i\ mod\ (A+1) ai mod (A+1) ,把每一堆的 SG 函数亦或起来,若最后的 SG 函数不为 0 0 0 则先手必胜,否则先手必败。
- A > B A>B A>B 时,如果先手和后手玩 A = B A=B A=B 先手就能获胜那就不管,否则先手先在一堆中取 B + 1 B+1 B+1 个然后再和后手玩 A = B A=B A=B ,此时也能取胜。若取不了 B + 1 B+1 B+1 个,先手就输了。
- A < B A<B A<B 时,先手肯定想的是逼后手来陪他玩 B = A B=A B=A 的情况,这就要求先手第一次取完过后 SG 函数 =0 且每一堆石子的个数都不超过 A A A ,此时先手必胜。反之先手必败。
NOI2011D2T3
题意: 给定一个 n × m 的棋盘,棋盘上除了一个空格外每个格子都有一或黑或白的棋子。双方轮流行动,每次先手可以将一个与空格相邻的白色棋子移动到空格内,后手可以将一个与空格相邻的黑色棋子移动到空格内。判断局面的胜负。
分析:观察空格的移动轨迹,手玩可以发现空格的移动路径一定不会出现环,把空格的起点看成黑点,移动路径则是黑白相间的。
接下来将相邻的黑白点连边构成一张图,新的问题变成了,先后手轮流取点,取过的点就删掉,要求这次取的点和上一次对方取的点有边。先手第一次取的点要和起点有边。
结论就是先手必胜当且仅当起点在所有的最大匹配里面。
这个怎么理解呢?分情况讨论一下
- 当起点在所有最大匹配中时,先手可以每次都沿着匹配边取点,而后手是取不到最大匹配外的点的(这里指所有最大匹配外的点),所以每次先手都能沿匹配边走,此时先手必胜。
- 如果有一个最大匹配不包含起点,此时先手第一次只能取有匹配的点,不然就不是最大匹配了。那么后手每次都能沿着匹配边走,所以后手就必胜了。
所以可以每次dinic一遍求解。
HDU2486
题意: 有 n 个石子,双方轮流操作,先手第一次能取至多 n − 1 个石子;除了先手第一次外每次操作,设另一方上一次操作取了 m 个石子,则这一次操作至多能取 km 个石子,取走最后一个石子即获胜。判断先手能否获胜。
分析:限制不一定是 k m km km ,只要是单增的任意函数 f ( m ) f(m) f(m) 都可以。
记 h i h_i hi 为第 i i i 大的必败的初始值,考虑如果我们现在知道了 h 1 , h 2 , . . . , h i h_1,h2,...,h_i h1,h2,...,hi,如何来求 h i + 1 h_{i+1} hi+1 。
设 h i + 1 = h i + S h_{i+1}= h_i+S hi+1=hi+S
首先若 f ( S ) < h i f(S)< h_i f(S)<hi ,那么 h i + S h_i+S hi+S 是必胜态,因为此时可以一步就能到 h i h_i hi 且加上 f ( S ) f(S) f(S) 的限制后 h i h_i hi 还是必败。
所以 f ( S ) ≥ h i f(S)\ge h_i f(S)≥hi ,现在双方都想先抢到 h i h_i hi 这个点,如果在 S S S 这半截先手必胜,那先手就和后手玩 S S S 这一截。否则先手就抢不到 h i h_i hi ,那先手就输了。
为什么不是抢 h i − 1 h_i-1 hi−1 ?因为最后一步走到 h i h_i hi 比走到 h i − 1 h_i-1 hi−1 限制更小,而且 h i h_i hi 是必败态,一定更优。
所以 h i + 1 = h i + h t , f ( h t ) ≥ h i , t 最小 h_{i+1}=h_{i}+h_t,f(h_t)\ge h_i,t\text{最小} hi+1=hi+ht,f(ht)≥hi,t最小 。
CF1149E
题意:给定一个(不一定弱连通的)DAG,初始每个节点上有若干个石子。双方轮流操作,每次可以选择一个节点,移去其上的至少一个石子,然后任意调整其直接后继的石子数量(可以加可以删,
但要保证石子数非负),无法操作者输。判断先手能否胜利,如果可以胜利,给出先手的一个可以到达胜利的第一步策略。
分析:这个题知道结论后巨好理解。
把点分层满足,选第 i i i 层的点可以任意改变第 1 , 2 , . . . , i − 1 1,2,.. .,i-1 1,2,...,i−1 层的亦或和。同层的点不能有连边。
只要先手第一步能把所有层的亦或和变为 0 0 0 则先手必胜。
为什么就懒得说了,这个也不难理解。
然后是树分治的题,在之前树分治就已经很熟练了,不赘述(因为这东西要去写啊,口糊了没有用。