10pts。其他RE。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ret=0,f=1;
char c=getchar();
for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-f;
for(;c>='0'&&c<='9';c=getchar()) ret=ret*10+c-'0';
return ret*f;
}
const int maxn=2000001;
struct awa{
int to,ne,w;
}edge[maxn*4];
int head[maxn*4],cnt=-1;
void add(int x,int y,int w){
edge[++cnt].ne=head[x];
edge[cnt].to=y;
edge[cnt].w=w;
head[x]=cnt;
}
int sum[maxn];
void dfs(int x,int fa){
for(int i=head[x];~i;i=edge[i].ne){
int to=edge[i].to;
int w=edge[i].w;
if(to!=fa){
sum[to]=sum[x]^w;
dfs(to,x);
}
}
}
int n;
struct trie{
char ch[3];
}t[maxn];
int tot;
void build(int v,int x){
for(int i=(1<<30);i;i>>=1){
bool c=v&i;
if(!t[x].ch[c]){
t[x].ch[c]=++tot;
}
x=t[x].ch[c];
}
}
int _qu(int v,int x){
int ans=0;
for(int i=(1<<30);i;i>>=1){
bool c=v&i;
if(t[x].ch[!c]){
ans+=i;
} else {
x=t[x].ch[!c];
}
}
return ans;
}
signed main(void){
memset(head,-1,sizeof head);
n=read();
for(int i=1;i<n;i++){
int u,v,w;
u=read();v=read();w=read();
add(u,v,w);
add(v,u,w);
}
dfs(1,-1);
for(int i=1;i<=n;i++){
build(sum[i],0);
}
int ans=0;
for(int i=1;i<=n;++i){
ans=max(ans,_qu(sum[i],0));
// cout<<_qu(sum[i],0)<<endl;
// cout<<sum[i]<<endl;
}
printf("%d\n",ans);
return 0;
}