我们考虑操作的性质。每次操作选择一个节点 v 和一个非负整数 x,会将 v 的子树中所有与 v 距离为偶数的节点异或 x。
由于异或运算满足自反律(a⊕a=0),我们可以自底向上地处理整棵树,使得每个节点通过一次操作变为 0。
关键观察:对于任意节点 u,若其深度(到根节点 1 的距离)的奇偶性为 p=dmod2,则只有那些“所在操作节点与 u 距离为偶数”的操作才会影响 u,而这样的操作节点必须与 u 同奇偶性。也就是说,所有深度奇偶性与 u 相同的节点上施加的操作,都会对 u 产生异或影响。因此,我们可以维护两个累积异或值:
在一棵以 1 为根、由 n 个节点组成的树上,每个节点 i 有一个初始整数值 ai。你可以多次执行如下操作:
你的目标是经过若干次操作后,使树上所有节点的值均变为 0。试求达成目标所需的最小总花费。
这里,节点 v 的子树由 v 及其所有后代节点构成;树上两个节点之间的距离定义为它们之间简单路径上的边数。操作的花费为每次操作所用 x 的总和。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.