题解:CF1585G Poachers

· · 题解

考虑对每棵树算 sg 值,容易发现有 \begin{cases}dp_{x,0}&=&\operatorname{mex}\limits_{i=1}^{lim_x}dp_{x,i}&\\dp_{x,i}&=&\bigoplus\limits_{v}dp_v{i-1}&(i>0)\end{cases}

其中 dp_{x,i} 表示以 x 子树中距 x 距离为 i 的所有点为根的子树的 sg 的异或和,lim_x 表示 x 子树中离 x 最近的叶子的距离。

考虑先给所有叶子挂一个虚点,这样就避免了特判一步删空。

发现这玩意和深度有关,于是我们可以得到一个基于长剖的线性做法。

也就是说我们总的复杂度为所有长链的长度之和,即 n

代码。