#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100005,M=3200500;
int h[N],nxt[N*2],e[N*2],w[N*2],bi=0;
int xord[N]={0};//到根的异或值
int son[M][2],idx=0,fa[N];
bool b[N]={0};
void add(int x,int y,int z)
{
bi++;
nxt[bi]=h[x];
h[x]=bi;
e[bi]=y;
w[bi]=z;
}
void dfs(int x,int y)
{
for(int i=h[x];i!=-1;i=nxt[i])
{
int v=e[i],u=w[i];
if(v!=y)
{
dfs(v,x);
xord[v]=xord[x]^u;
}
}
}
void insert(int x)
{
int p=0;
for(int i=31;i>=1;i--)
{
int u=x>>(i-1)&1;
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
}
int query(int x)
{
int p=0,ans=0,s=1;
for(int i=(1<<30);i;i>>=1)
{
int u=x>>(i-1)&1;
if(son[p][u^1])
{
ans=ans|(1<<(i-1));
p=son[p][u^1];
}
else p=son[p][u];
}
return ans;
}
int main()
{
int n,x,y,z;
memset(h,-1,sizeof(h));
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
dfs(1,-1);
int maxx=-1;
for(int i=1;i<=n;i++)
{
insert(xord[i]);
int c=query(xord[i]);
if(c>maxx) maxx=c;
}
printf("%d",maxx);
return 0;
}
调了很久还是46,这是什么错误啊