QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: Anonymous

Posted at: 2026-05-26 15:05:45

Last updated: 2026-05-26 20:26:43

Back to Problem

线性做法

首先考虑写一份暴力。发现难点在于回溯之后可以走到若干个状态,因此考虑把回溯之后走到状态的 SG 值记录进状态。设 $f_{u,S}$ 表示当前在点 u,回溯之后能走到的状态的 SG 集合为 S,SG 值是多少。转移为倒序枚举出边,往 S 内加入 $f_{v,S}$,最后返回 $mex(S)$。

接下来考虑所有点都是白点的部分。根据集合的 mex 等于补集的 min,把 f 中的 S 取补集之后观察,可以发现 dp 中的 S 一维本质是把 S 这个集合中的数从答案候选中排除,所以可以重新设 $dp_u$ 表示在点 u,SG 值是候选集合中从小到大第几个。转移是维护候选集合,倒序枚举出边,把没被删除的第 $dp_v$ 小值删除,最后返回候选集合的最小值。

然而,这一部分有更方便的线性做法。把上面的过程倒过来,变成正序枚举出边,转移为 $dp_u \gets [dp_v \leq dp_u]$,出乎意料的简单。

接下来考虑既有白点又有黑点的部分。注意到除了没有出边的黑点,所有黑点的后继是唯一的。也就是说,所有黑点的 SG 值 $\leq 1$。所以考虑把 $\leq 1$ 的数出现状态暴力记在 dp 数组中,转移是容易的,复杂度 $O(n+\sum m_i+k)$。

Comments

avatar
wsc2008
你就是无名佚?
avatar
gaozeju
大神啊
avatar
Milmon
大神啊
avatar
wangmarui
给您磕一个
avatar
shengxuanye
给您磕一个
avatar
lovely_ckj
大声啊
avatar
unknown-name-user
给您磕一个