uoj266[清华集训2016]Alice和Bob又在玩游戏(SG函数) uoj 题解时间 考虑如何求出每棵树(子树)的 $ SG $ . 众所周知一个状态的 $ SG $ 是其后继的 $ mex $ . 考虑其后继的 $ SG $ 如何求. 对于将 $ y $ 的贡献计算到其父亲 $ x $ 上. 如果删掉 $ x $ ,后继状态是所有儿子的 $ SG $ 异或, 如果删掉 $ y $ 以内的点,则是用 $ y $ 子树内的所有后继状态异或上 $ x $ 子树内 $ y $ 子树外的部分. 这…
题目链接:Alice和Bob又在玩游戏 这道题就是一个很显然的公平游戏. 首先\(O(n^2)\)的算法非常好写.暴力枚举每个后继计算\(mex\)即可.注意计算后继的时候可以直接从父亲转移过来,没必要\(O(n)\)扫一遍所有节点 . 然后我们仔细看看转移,就可以发现这玩意儿就是一个集合,每次要支持集合异或上一个数,集合插入一个数,以及集合合并.然后我们用\(Trie\)树(其实就是线段树)来维护即可.每个节点记录一个\(size\),就可以从顶往下找\(mex\)了. 下面贴代码: #inc…
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希望!” 只见他的身体中喷射出火焰之力 通过坚固的钢铁,传遍了千家万户 这时,只听见人们欢呼 “暖气来啦!” 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的宿…
[UOJ266]Alice和Bob又在玩游戏 Tags:题解 作业部落 评论地址 TAG:博弈 题意 不同于树的删边游戏,删掉一个点删去的是到根的路径 题解 这题只和计算\(SG\)有关,博弈的有关内容可以移步这篇博客 这和翻棋子游戏不同!每个点不能单独考虑 考虑计算一个游戏(子树\(x\))的\(SG\):对其后继状态取\(mex\) 这里的后继状态是指去掉子树\(x\)内任意一个点所得的若干子游戏的异或和(联通块) 用\(SG[x]\)维护子树\(x\)游戏的\(SG\)值,考虑转移给父亲\…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ266.html 题解 首先我们可以直接暴力 $O(n^2)$ 用 sg 函数来算答案. 对于一个树就是枚举一下从根出发到哪一个节点为止的路径被删掉了,剩下所有的子树的sg值xor起来,对于每一个路径后的答案取一个 mex . 我们考虑快速的做这个过程. 直接写个 Trie 再 DSU on tree 就好了,只要支持查询 mex 和整棵 trie 对某一个值 xor 这两种操作就好了. 时间复杂度 $O…
题面传送门 神仙题. 首先注意到此题的游戏是一个 ICG,故考虑使用 SG 定理解决这个题,显然我们只需对每个连通块计算一遍其 SG 值异或起来检验是否非零即可.注意到我们每删除一个点到根节点的路径后留下的是一些互不影响的子树,并且剩余部分的 SG 值就是剩余子树的 SG 值异或起来,因此我们考虑设 \(sg_u\) 表示 \(u\) 子树部分的 SG 值,我们再实时维护一个 \(t_v\) 表示删除 \(v\) 到当前计算的节点(譬如我们计算 \(sg_u\) 的时候当前计算的节点就是 \(u…
题意:俩智障又在玩游戏.规则如下: 给定n个点,m条无向边(m<=n-1),保证无环,对于每一个联通块,编号最小的为它们的根(也就是形成了一片这样的森林),每次可以选择一个点,将其本身与其祖先全部删除,不能操作者输.判断先手胜负. 题解:比较神的一道题. 我们现在要解决的问题是怎么求解一棵子树的SG值,首先把根删掉的情况考虑,这很好办,直接把子树的sg异或起来就好,关键是如果删除点在子树里怎么办. 这里用到了一个巧妙的东西,trie.怎么会用这个呢?因为删除子树里的节点就相当于是子树里这种对应的…
Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合选择一个没有被删除的节点x,将x及其所有祖先全部删除,不能操作的人输 .注:树的形态是在一开始就确定好的,删除节点不会影响剩余节点父亲和儿子的关系.比如:1-3-2 这样一条链 ,1号点是根节点,删除1号点之后,3号点还是2号点的父节点.问有没有先手必胜策略.n约为10w. 显然只要算出每颗子树的sg值就可以…
传送门 完了我连sg函数是个啥都快忘了 设\(sg[u]\)为以\(u\)为根节点的子树的\(sg\)函数值,\(rem[u]\)表示\(u\)到根节点的路径删掉之后剩下的游戏的异或值 根节点\(u\)的\(rem\)就是它所有子树的异或值,然后对它的每个儿子\(v\)来说,它们的\(rem\)需要异或上\(rem[u]\bigoplus sg[v]\) 对于每一个节点,最小的不出现在子树的\(rem\)集合中的值就是它的\(sg\) 那么子树的\(rem\)集合向上的合并的时候,就是一个集合,…
不难的题目.因为SG性质,所以只需要对一棵树求出. 然后如果发现从上往下DP不太行,所以从下往上DP. 考虑一个点对子树的合并,考虑下一个删的点在哪一个子树,那么剩下的状态实际上就是把一个子树所有能达到的状态异或上一个数. 此时还有不到子树的状态,直接插入子树SG异或值. 所以显然,就是维护一个支持全部异或,以及状态合并,查询mex的数据结构,直接trie合并带tag就好了. 时空复杂度 \(O(n \log n)\) #include <bits/stdc++.h> const int MA…