9pts求调
查看原帖
9pts求调
464732
luqyou楼主2023/2/1 08:58
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
struct edge{
	int e,v;
};
int s[N],trie[N*31][2],n,cnt;
vector<edge> vec[N];
void dfs(int x,int fa){
	for(int i=0;i<vec[x].size();i++){
		int nx=vec[x][i].e;
		if(nx!=fa){
			s[nx]=s[x]^vec[x][i].v;
			dfs(nx,x);
		}
	}
}
void insert(int v){
	int now=0;
	for(int i=(1<<30);i;i>>=1){
		int x=(v&i);
		if(!trie[now][x]){
			trie[now][x]=++cnt;
		}
		now=trie[now][x];
	}
}
int getval(int v){
	int ans=0,now=0;
	for(int i=(1<<30);i;i>>=1){
		int x=(v&i);
		if(trie[now][!x]){
			ans+=i;
			x=trie[now][!x];
		}
		else{
			x=trie[now][x];
		}
	}
	return ans;
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v,w;
		cin>>u>>v>>w;
		vec[u].push_back((edge){v,w});
		vec[v].push_back((edge){u,w});
	}
	dfs(1,-1);
	for(int i=1;i<=n;i++){
		insert(s[i]);
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		ans=max(ans,getval(s[i]));
	}
	cout<<ans;
	return 0;
}

2023/2/1 08:58
加载中...