树 题解
题意
给定一个包含 \(n\) 个点的有根无边权树,根节点为 \(1\),另外点 \(i\) 的点权为 \(v_i\)。对于点 \(i\),定义其子树的集合为 \(S_i\),定义其在树中的深度为 \(dep_i\)。其中 \(dep_1=0\)。定义
\[f(i)=\otimes_{j\in S}\Big(v_j+dep_j-dep_i\Big)
\]
求 \(\sum_{i=1}^nf(i)\)。
题解
比较水的紫吧?
由于有异或,考虑对于每个子树维护一个 01-Trie。那么求点 \(i\) 对应的子树的 01-Trie 时,只需要把 \(i\) 的儿子的子树代表的 01-Trie 合并起来就行。然后考虑 \(dep_j-dep_i\) 的变化,显然是全局 \(+1\)。考虑怎么在 01-Trie 上做全局 \(+1\):从低位往高位存二进制,然后加 \(1\) 的时候交换左右儿子,再去原来的 \(1\) 对应的子树递归修改。全局 \(+1\) 的复杂度就是 \(O(\omega)\)。01-Trie 合并的复杂度与线段树合并类似,均摊总时间复杂度为 \(O(n\omega)\),可以通过。

浙公网安备 33010602011771号