标签:题解 不包含 最优 amp lin inter 链接 变换 win
再不更博客我就……!!!……吃cjb!
题意:给出一棵 \(N(\leq 10^6)\) 个点的带边权的树。甲乙两人轮流博弈,每次可以选择将一条边 \(e\) 的边权 \(w_e\) 减一。若减完后变成 \(0\),则割掉不包含根的那个连通块。双方执最优策略,问先手是否必胜。如果必胜的话,还要输出所有可行的第一步删边方案。
题解:如果边权 \(w_e=1\),有一个很简单的结论:子树 $sg_x=(sg_{y_1}+1) \oplus (sg_{y_2}+1) \dots $。这个可以用归纳法来证明。
此题中边权可以大于 \(1\)。事实上,还有一个一般性的基于图的做法。链接可参考这里。
主要思想是基于对原图进行等价变换。
等价变换①:偶环可以“缩成”一个点(偶环里的边将变成这个点的子环)。
等价变换②:自环可以拆成一个新的儿子。
直接将此题的树看成图,可以发现子树 \(sg_y\) 对 \(sg_x\) 的贡献是 \(sg_y \oplus [w_{x,y} \nmid 2]\) 。特殊情况是 \(sg_y+1[w_{x,y}=1]\)。
第二问相当于,我们要将某一条边减少一,使根的 \(sg\) 变为 \(0\)。直接 \(DFS\) 下去,每次维护需要将当前的 \(sg\) 变成多少才能合法。
标签:题解 不包含 最优 amp lin inter 链接 变换 win
原文地址:https://www.cnblogs.com/jiangshibiao/p/10055197.html