rt,样例每次输入,结果都不一样,答案在500~600之间徘徊
#include <bits/stdc++.h>
int trie[2000010][2], v_xor[2000010], N, u, v, w, ans = -114514, tot;
std::vector < std::pair <int, int> > G[2000010];
void init(int node, int fa) {
for (size_t i = 0; i < G[node].size(); i ++) {
int now = G[node][i].first;
if (now == fa) continue;
v_xor[now] = v_xor[node] ^ G[now][i].second;
init(now, node);
}
}
void insert(int val) {
int x = 0;
for (int i = (1 << 30); i >= 1; i >>= 1) {
int now = val & i;
if (!trie[x][now]) trie[x][now] = ++tot;
x = trie[x][now];
}
}
int query(int val) {
int x = 0, ret = 0;
for (int i = (1 << 30); i >= 1; i >>= 1) {
int now = val & i;
if (trie[x][!now]) ret += i, x = trie[x][!now];
else x = trie[x][now];
}
return ret;
}
int main() {
std::cin >> N;
for (int i = 1; i < N; i ++)
std::cin >> u >> v >> w, G[u].push_back({v, w}), G[v].push_back({u, w});
// std::cout << v_xor[3];
v_xor[1] = 0, init(1, 0);
for (int i = 1; i <= N; i ++) insert(v_xor[i]);
for (int i = 1; i <= N; i ++) ans = std::max(ans, query(v_xor[i]));
std::cout << ans;
return 0;
}