Liveddd's Blog

愛にできることはまだあるかい

P8994 [北大集训 2021] 经典游戏

考试题目。

考虑用 SG 函数解决问题,那么 SG(x)=ysubtree(x),yxSG(y),叶节点 SG(x)=0。容易发现 SG(x)=dx,其中 dxx 为根的子树的最深深度。我们只处理 ai1(mod2)SG(x) 值。那么先手必胜的充要条件即 ax(mod2)1SG(x)>dy

考虑我们需要进行的操作,换根,ax1,以及求满足 dis(y,y)1y。s

不妨设点 1 为初始根。考虑换根操作,depx 只与 fax 有关。于是 SG 值发生改变的只有以 1 为根 1x 链上节点,这一部分不会因为 ax1 而改变。我们可以简单树形 DP 得到。我们还需要异或上以 x 为根 x1 的。

考虑 ax1。而 x 对点 x 产生影响的条件是 xsubtree(x) ,并且子树 x 为子树 x 中最深的子树,即为 x 的长儿子。于是我们直接长链剖分,那么修改是长链上开头的连续一段,树状数组维护。

Gitalk 加载中 ...