评测记录
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll e[5000005][2],a[100005],n;
struct dataa
{
ll to,val;
};
vector<dataa> edge[1000006];
int cnt=0;
void inser(int x)
{
ll p=0;
for(ll i=32;i>=0;i--)
{
ll s=(x>>i)&1;
if(e[p][s]==0)
e[p][s]=++cnt;
p=e[p][s];
}
}
ll gets(ll x)
{
ll p=0,ans=0;
for(ll i=32;i>=0;i--)
{
ll s=(x>>i)&1;
if(e[p][s^1]==0)
p=e[p][s];
else
{
p=e[p][s^1];
ans=ans^(1<<i);
}
}
return ans;
}
void dfs(ll now,ll s,ll fa)
{
a[now]=s;
inser(s);
for(int i=0;i<edge[now].size();i++)
if(edge[now][i].to!=fa)
dfs(edge[now][i].to,s^edge[now][i].val,now);
}
int main()
{
scanf("%lld",&n);
for(ll i=1;i<n;i++)
{
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
edge[u].push_back({v,w});
edge[v].push_back({u,w});
}
dfs(1,0,0);
ll maxn=0;
for(int i=1;i<=n;i++)
maxn=max(maxn,gets(a[i]));
printf("%lld",maxn);
return 0;
}