RE了,不知为什么,求条
查看原帖
RE了,不知为什么,求条
1065071
Atserckcn楼主2024/4/29 21:53

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int cnt,tot,t,ans,num;
int sum[MAXN];
struct EDGE{
	int from,to,w,pre;
}edge[MAXN<<1];
int head[MAXN];
void add(int from,int to,int w)
{
	edge[++cnt].from=from;
	edge[cnt].to=to;
	edge[cnt].w=w;
	edge[cnt].pre=head[from];
	head[from]=cnt;
	return;
}
int n,u,v,w;
struct TRIE{
	int ch[2];
}trie[MAXN<<5];
void dfs(int son,int fa)
{
	for(int i=head[son];i;i=edge[i].pre)
	{
		if(edge[i].to==fa) continue;
		sum[edge[i].to]=sum[son]^edge[i].w;
		dfs(edge[i].to,son);
	}
	return;
}
void build_trie(int w,int now)
{
	for(int i=(1<<25);i;i=i>>1)
	{
		t=w&i;
		if(trie[now].ch[t]==0)
			trie[now].ch[t]=++tot;
		now=trie[now].ch[t];
	}
	return;
}
int find(int w,int now)
{
	num=0;
	for(int i=(1<<25);i;i=i>>1)
	{
		t=w&i;
		if(trie[now].ch[!t])
		{
			num+=i;
			now=trie[now].ch[!t];
		}
		else now=trie[now].ch[t];
	}
	return num;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
		add(v,u,w);
	}
	dfs(1,1);
	for(int i=1;i<=n;i++) build_trie(sum[i],0);
	for(int i=1;i<=n;i++) ans=max(ans,find(sum[i],0));
	printf("%d\n",ans);
	return 0;
}

提交记录

2024/4/29 21:53
加载中...