神秘RE求调
查看原帖
神秘RE求调
556740
hzx360楼主2023/8/13 16:02
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e6+100;
int n,val[N],p[100];
int head[N],to[N],w[N],ne[N],tot;
void add(int x,int y,int z){
	ne[++tot]=head[x];
	to[tot]=y,w[tot]=z;
	head[x]=tot;
}
void dfs(int u,int fa){
	for(int i=head[u];i;i=ne[i]){
		int v=to[i];
		if(v==fa) continue;
		val[v]=val[u]^w[i];
		dfs(v,u);
	}
}
struct tree{int ch[3];}rt[N];int cnt;
void build(){
	for(int i=1;i<=n;i++){
		int now=0;
		for(int k=31;k>=0;k--){
			long long x=(val[i]&p[k]?1:0);
			if(!rt[now].ch[x]) rt[now].ch[x]=++cnt;
			now=rt[now].ch[x];
		}
	}
}
signed main(){
	cin>>n;
	p[0]=1;
	for(int i=31;i>=1;i--) p[i]=(1<<i);
	for(int i=1;i<n;i++){
		int x,y,z;
		scanf("%lld%lld%lld",&x,&y,&z);
		add(x,y,z),add(y,x,z);
	}
	dfs(1,0);
	build();
	int ans=0;
	for(int i=1;i<=n;i++){
		int bb=0,now=0;
		for(int k=31;k>=0;k--){
			int x=val[i]&p[k];
			if(rt[now].ch[!x]) bb+=p[k],now=rt[now].ch[!x];
			else now=rt[now].ch[x];
			
		}
		ans=max(ans,bb);
	}
//	for(int i=1;i<=n;i++) cout<<val[i]<<' ';
	cout<<ans;
}
2023/8/13 16:02
加载中...