#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
// build the edge of a tree
int head[N], tot;
struct Edge{
int to, w, next;
}e[2*N];
void add(int u, int v, int w){
e[tot].to = v;
e[tot].w = w;
e[tot].next = head[u];
head[u] = tot++;
}
int dp[N];
void dfs(int now, int fa){
for (int i = head[now]; ~i; i = e[i].next){
if (e[i].to != fa){
dp[e[i].to] = dp[now]^e[i].w;
dfs(e[i].to, now);
}
}
}
//01trie
struct Trie{
int nex[32*N][2], cnt;
void insert(int num){
int p = 0;
for (int i = 31; i >= 0; i--){
int c = (num >> i) & 1;
if (!nex[p][c]){
nex[p][c] = ++cnt;
}
p = nex[p][c];
}
}
int cmp(int num){
int p = 0;
int ans = 0;
for (int i = 31; i >= 0; i--){
int c = (num >> i) &1;
if (nex[p][c^1]){
ans |= (1 << i);
p = nex[p][c^1];
}
else
p = nex[p][c];
}
return ans;
}
}trie;
int main(void){
int n;
cin >> n;
memset(head, -1, sizeof(head));
for (int i = 1; i <= n-1; i ++){
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
add(u, v, w), add(v, u, w);
}
int ans = 0;
dfs(1, 0);
for (int i = 1; i <= n-1; i++)
trie.insert(dp[i]);
for (int i = 1; i <= n-1; i++){
ans = max(ans, trie.cmp(dp[i]));
}
cout << ans << endl;
}
代码如上, 我实在找不出啥毛病了, 我太菜了, 卡了三个小时, 要疯了。 再多请教一个问题, 求教各位大佬教教我dfs那是什么意思, 我已经好久没碰dfs了, 已经蒙了