0 pts 全 WA 求助
查看原帖
0 pts 全 WA 求助
688783
SilverLi楼主2023/5/16 22:41
#include <bits/stdc++.h>
using namespace std;
#define v first
#define w second
#define mk make_pair
#define pi pair<int,int>
#define pb push_back
const int N=1e6+5;
int n,ans,s[N];
int cnt,t[N][2];
vector<pi> g[N];
void dfs(int u,int ft) {
   for(pi i:g[u])
      if(i.v!=ft)
			s[i.v]=s[u]^i.w,
			dfs(i.v,u);
}
void insert(int u,int v) {
    for(int i=(1<<30);i;i>>=1) {
        bool j=v&i;
        if(!t[u][j])	t[u][j]=++cnt;
        u=t[u][j];
    }
}
int find(int u,int v) {
    int res=0;
    for(int i=(1<<30);i;i>>=1){
        bool j=v&i;
        if(t[u][!j])	res+=i,u=t[u][!j];
        else u=t[u][j];
    }
    return res;
}
signed main() {
   cin>>n;
   for(int i=1;i<n;++i) {
   	int u,v,w;
   	cin>>u>>v>>w;
   	g[u].pb(mk(v,w));
   	g[v].pb(mk(u,w));
	}
	dfs(1,0);
	for(int i=1;i<=n;++i)	insert(1,s[i]);
	for(int i=1;i<=n;++i)	ans=max(ans,find(1,s[i]));
	cout<<ans;
	return 0;
}
2023/5/16 22:41
加载中...