「AGC017D」题解

· · 题解

怎么都没有一点解释的,看不起 SG 函数??

我们发现这题是一个 DAG 博弈论问题,考虑 SG 函数。

我们设 u 子树博弈后的 SG 函数为 f_uu 子树的 DAG 为 g_u

考虑对于 u 计算 f_u

对于每个 v,s.t\ \exists(u,v),都看作是一个子 DAG,同时我们每时每刻都可以直接把 (u,v) 这条边割掉,于是新建一个节点,将 g_v 中的每一个节点都连向 0 得到 g'_v,于是 g'_v 里的每个点 SG 值应当都加上 1,于是 g'_v 的 SG 值 f'_v=f_v+1

我们知道很多 DAG 拼一起 SG 值是它们的异或和,于是 f_u=\oplus_{(u,v)=1}(f_v+1)

做完了。