C. 最长异或值路径(The XOR Longest Path)

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

题目来源于 POJ3764以及ACwing144

给定一个树,树上的边都具有权值。

树中一条路径的异或长度被定义为路径上所有边的权值的异或和:!!树是啥?权值是啥?异或是啥???(逃

_{xor}length(p) = \bigoplus{ } _{ e \in p } w(e)

\bigoplus 为异或符号。

给定上述的具有 n 个节点的树,你能找到异或长度最大的路径吗?别想,除了zzhyys这两位 dalao 以及yzy这位 dadie 以外谁都不能(这个蒻蘜早已瑟瑟发抖)

真的不要看这个真的没用的提示

先随便挑个根节点(反正是树)
f(a, b) 表示节点 a,b 的简单路径上所有边权的异或值, lca(a,b) 表示 a,b 的最近公共祖先, root 表示根节点,那么有
f(a, b)
= f(a, lca(a, b)) ^ f(b, lca(a, b))
= (f(a, lca(a, b)) ^ f(lca(a, b), root) ^ f(lca(a, b), root)) ^ (f(b, lca(a, b)) ^ f(lca(a, b), root) ^ f(lca(a, b), root))
= (f(a, root) ^ f(lca(a, b), root)) ^ (f(b, root) ^ f(lca(a, b), root))
= (f(a, root) ^ f(b, root)) ^ f(lca(a, b), root) ^ f(lca(a, b), root)
= f(a, root) ^ f(b, root)
知道这个结论后, dfs 求所有节点与 root 节点的路径权值的异或值
最后直接取 max 就可以啦QAQ

written by myd

实在不会就去瞅我(myd)博客标程 ♪───O(≧∇≦)O────♪

不许抄袭!!!😈😈😈

输入格式

第一行包含整数 n ,表示树的节点数目。

接下来 n−1 行,每行包括三个整数 u,v,w, 表示节点 u 和节点 v 之间有一条边权重为 w

输出格式

输出一个整数,表示异或长度最大的路径的最大异或和。

样例

输入样例

4
0 1 3
1 2 4
1 3 6

输出样例

7

数据范围与提示

数据范围

1≤n≤100000

0≤u,v<n

0≤w<2^{31}

样例解释

样例中最长异或值路径应为 0\rightarrow 1\rightarrow 2 ,值为 7(=3\bigoplus4)