我没有用01trie,处理完到根节点的异或和后暴力判断,循环到一定次数直接输出,结果过了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,h[1000005],cnt,dis[1000005];
struct edge{
int v,w,nx;
}e[2000005];
void add(int u,int v,int w){
e[++cnt]={v,w,h[u]};
h[u]=cnt;
}
void dfs(int rt,int f){
for(int i=h[rt];i;i=e[i].nx){
if(e[i].v!=f){
dis[e[i].v]=dis[rt]^e[i].w;
dfs(e[i].v,rt);
}
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
dfs(1,0);
int t=0,mx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
mx=max(mx,dis[i]^dis[j]);
t++;
if(t>=100000000){
cout<<mx;
return 0;
}
}
}
cout<<mx;
return 0;
}