加上一句多余的输出,就能运行 求助
查看原帖
加上一句多余的输出,就能运行 求助
232507
OK咯莫名其妙楼主2021/9/19 16:09
#include<bits/stdc++.h>
using namespace std;
const int maxn=2000001;
struct node{
	int v,w,nxt;
}edge[maxn];
int cnt=-1;
int head[maxn];
void add(int u,int v,int w){
	edge[++cnt].nxt=head[u];
	edge[cnt].v=v;
	edge[cnt].w=w;
	head[u]=cnt;
}
int sum[maxn];
void dfs(int x,int fa){
	for(int i=head[x];~i;i=edge[i].nxt){
		int v=edge[i].v;
		int w=edge[i].w;
		if(v!=fa){
			sum[v]=sum[x]^w;
			dfs(v,x);
		}
	}
}
struct trie{
	int ch[2];
}t[maxn];
int tot;
void build(int val,int x){
	for(int i=(1<<30);i;i>>=1){
		bool c=val&i;
		if(!t[x].ch[c]){
			t[x].ch[c]=++tot;
		}
		x=t[x].ch[c];
	}
}
int query(int val,int x){
	int ans=0;
	for(int i=(i<<30);i;i>>=1){
		bool c=val&i;
		if(t[x].ch[!c]){
			ans+=i;
			x=t[x].ch[!c];
		}
		else x=t[x].ch[c];
	}
	return ans;
}
int main(){
	memset(head,-1,sizeof(head));
	int n;
	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,-1);
	//cout<<n<<endl;
	for(int i=1;i<=n;++i)build(sum[i],0);
    int ans=0;
    for(int i=1;i<=n;++i){
        ans=max(ans,query(sum[i],0));
    }
    cout<<ans<<endl;
    return 0;
} 
2021/9/19 16:09
加载中...