#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
struct edge{
int to,nxt,val;
}d[N];int head[N],Cnt=1;
void add(int u,int v,int w){d[++Cnt]=(edge){v,head[u],w},head[u]=Cnt;}
int n,val[N];int maxi=0;int ans=0,t[N][2],tot=0;
void insert(int x){
int p=0;
for(int i=31;i>=0;i--){
int now=(x&(1<<i))==0?0:1;
// cout<<now<<endl;
if(t[p][now]==0) t[p][now]=++tot;
p=t[p][now];
}
// cout<<tot<<endl;
}
void find(int x){
int p=0,tp=0;
for(int i=31;i>=0;i--){
int now=(x&(1<<i))==0?0:1;
if(t[p][now^1]) p=t[p][now^1],tp+=1<<i;
else p=t[p][now];
}
maxi=max(maxi,tp);
}
void dfs(int x){
for(int i=head[x];i;i=d[i].nxt){
int v=d[i].to,w=d[i].val;
val[v]=w^val[x];
insert(val[v]);
find(val[v]);
dfs(v);
}
}
int main(){
scanf("%d",&n);insert(0);
// cout<<tot<<endl;
for(int i=1;i<n;i++){
int v,u,w;
scanf("%d%d%d",&v,&u,&w);
add(v,u,w);
}
dfs(1);
// cout<<tot<<endl;
cout<<maxi<<endl;
}
1478:The xor-longest Path(tire+异或前缀
最新推荐文章于 2022-12-08 09:53:44 发布