CF1844G Tree Weights

发布时间 2023-08-16 18:33:09作者: 275307894a

题面传送门

这个真的很容易想到吗?

首先定 \(1\) 为根,设每个点的深度是 \(d_i\),则两个点之间的距离是 \(d_{i}+d_{i+1}-2d_{LCA(i,i+1)}\)。题目中相当于给出了 \(n-1\) 个方程和 \(n-1\) 个限制,要解出一个 \(n-1\) 元的方程。因为限制是从 \(1\to n-1\) 给出的,所以不可能包含,因此解至多只有一个。所以可以不用管限制,将这个解解出来之后看是否满足限制即可。

然后就开始人类智慧了。你会发现每个方程中假设我们已经知道了 \(d_i\),在推出 \(d_{i+1}\) 的过程中还需要知道 \(d_{LCA(i,i+1)}\),这不好。但是如果给出的是边权的异或和而不是和,那么这就好办。边权的异或和就是 \(d_i\operatorname{xor}d_{i+1}\),这样就可以推出所有 \(d\)

最离谱的事情就是这个和位运算一点没有关系的题要按位考虑。考虑最低位,在不考虑进位的情况下等价于异或,因此我们可以将每个\(d\) 的最低位推出来。之后在每条路径中刨除最低位的贡献之后,次低位就可以看成异或,仍然可以推出来。因此可以在 \(O(n\log n+n\log V)\) 时间内推出所有的 \(d\),之后 check 是平凡的。

submission