路径异或和最大
题目链接:poj 3764
题意:给定一棵 N≤10^5 个点的树,每条边上有一个权值,求出一条路径使得路径上的边权异或和尽可能的大。
题解:这个题最终是要求出一条路径,使得它的边权异或和最大。因为这是一棵树,所以每一条路径都是两个端点之间唯一的路径。这时,我突然联想到了求两点之间的路径长度,方法是 Root 到 X 的距离加上 Root 到 Y 的距离减去两倍的 Root 到 Lca 的距离。这道题有没有类似的方法呢?这时我们将惊喜的发现,因为两个相同的数异或值为零,所以如果直接将 Root 到 X 的异或和与 Root 到 Y 的异或和异或起来,Root 到 Lca 的异或和将会直接抵消掉!所以问题就转化为了,求出每一个点到根的异或和 Wi ,然后挑出两个 Wi 使得它们的异或和最大。所以我们就将每一个数看成一个二进制的零一串,插入 Trie 树,然后尽可能的走每一位的取反的边,所有取反边的和就是最后的答案。
我思故我在:垃圾 POj 卡我 Vector !记着存边要用邻接表!