若对任意
wv>wu,总有
v∈subtreeu,选
u 者必败,我们称
u 为
坏点。
对于 E1,选
w 最大的不坏点即可,此时对手只能选坏点。
E1 策略告诉我们,只要对方可以选不坏点,我们必败。
所以 E2 策略是:选择迫使对手只能选坏点的点。
假设这样的点为点
u,则对任意
wv>wu:
-
-
要么对任意
wt>wv:
- t 在 u 子树内。
- t 在 v 子树内。
我们可以将第二点重写为:
- 对任意 wt>wv 且 t 不在 v 子树内:t 在 u 子树内。
记
g=lca(t),便可进一步重写为:
(顺便提一嘴,求
g 就是求树上点集的
lca,直接找点集里
dfn 最小最大的两个点,取
lca 即可。)
于是一个点满足 E2 策略可以写成下面的形式:
and and (v1∈subtreeu or g1∈subtreeu)(v2∈subtreeu or g2∈subtreeu)…
上面的式子可以进行这样的合并:
and (v1∈subtreeu or g1∈subtreeu)(v2∈subtreeu or g2∈subtreeu)⇔ or deeper(lca(v1,v2),lca(v1,g2))∈subtreeudeeper(lca(g1,v2),lca(g1,g2))∈subtreeu
其中
deeper(u.v) 代表
u,v 中深度更大的点。
这样所有
v 对
u 产生的约束最后都会合并为
(a∈subtreeu or b∈subtreeu) 的形状。
实现上,将点按
w 分组,从大到小扫过每个组,考虑当前点是否满足约束以及当前点对后续点带来的约束即可。