55pts,调了一上午了
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int trie[N*35][2],a[N];
int n,tot;
int pre[N<<1],now[N<<1],to[N<<1],val[N<<1],T;
void add(int x,int y,int z){
pre[++T]=now[x];
now[x]=T;to[T]=y;
val[T]=z;
}
void dfs(int u,int fa){
for(int i=now[u];i;i=pre[i]){
int v=to[i];
if(v==fa)continue;
a[v]=a[fa]^val[i];
dfs(v,u);
}
}
void ins(int x){
int p=0;
for(int i=30;i>=0;i--){
int l=x>>i&1;
if(!trie[p][l])
trie[p][l]=++tot;
p=trie[p][l];
}
}
int query(int x){
int ret=0,p=0;
for(int i=30;i>=0;i--){
int l=x>>i&1;
if(trie[p][l^1]){
p=trie[p][l^1];
ret+=(1<<i);
}
else p=trie[p][l];
}
return ret;
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
dfs(1,0);
int ans=0;
for(int i=1;i<=n;i++)ins(a[i]);
for(int i=1;i<=n;i++)ans=max(ans,query(a[i]));
printf("%d\n",ans);
return 0;
}