题解 CF1709 XOR

*2400 *dsu on tree
一道很好的题目 思路很巧妙

题目大意

给出一棵树,\(n\) 个节点,每个节点有权值 \(v\) ,定义一次操作为修改任意一个节点的值为任意正整数,要求最后的树不存在任意简单路径使得路径异或和为 \(0\)

Solution

一个很常用的套路,先钦定根节点为 \(1\)
定义 \(w_x\) 表示从根节点异或到节点 \(x\) 的亦或和
那么对于任意点 \(u,v\) 它的路径异或和为 \(w_x \oplus w_v \oplus a_{lca(u,v)}\)
我们考虑操作修改为任意正整数意味着什么
显然地,每次修改为一个极大的不同的整数,能保证经过这个点所有的异或都不为 \(0\)

也就是说 这个操作 相当于切断一个节点与此相连的所有边

问题转化为删去的边最少
我们考虑一个节点要保留的要求是什么

假设这个点所有的子树都考虑完毕了 到了当前点 若要保留必须要保证子树内跨过当点的异或值不为 \(0\)
暴力判断即可

启发式合并优化判断 时间复杂度 \(O(n\log^2 n)\)

posted @ 2024-02-29 20:33  g1ove  阅读(3)  评论(0编辑  收藏  举报