树 题解

题意

给定一个包含 \(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)\),可以通过。

posted @ 2026-01-23 17:53  DeadFatsheep  阅读(1)  评论(0)    收藏  举报