#include<bits/stdc++.h>
using namespace std;
const int maxn=10000010;
struct edge{
int w;
int u;
int next;
}e[maxn];
int head[maxn],cnt=0,n,sum[maxn];
int trie[maxn][2];
void add(int x,int y,int z)
{
e[++cnt].w=z;
e[cnt].next=head[x];
e[cnt].u=y;
head[x]=cnt;
}
void dfs(int fa,int x)
{
for(int i=head[x];i;i=e[i].next)
{
int son=e[i].u;
if(son!=fa)
{
sum[son]=sum[x]^e[i].w;
dfs(x,son);
}
}
}
int maxx=1<<30,tot=0;
void build(int cnt,int id)
{
for(int i=maxx;i;i>>=1)
{
if(!trie[id][sum[cnt]&i]) trie[id][sum[cnt]&i]=++tot;
id=trie[id][sum[cnt]&i];
}
}
int ask(int cnt,int id)
{
int qwq=0;
for(int i=maxx;i;i>>=1)
{
if(trie[id][!(i&sum[cnt])])
{
qwq+=i;
id=trie[id][!(i&sum[cnt])];
}
else id=trie[id][i&sum[cnt]];
}
return qwq;
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
dfs(0,1);
for(int i=1;i<=n;i++)
{
build(i,0);
}
int ans=-1;
for(int i=1;i<=n;i++)
{
ans=max(ans,ask(i,0));
}
cout<<ans;
return 0;
}
不知道哪错了,有RE有WA...