字典树全WA求调
查看原帖
字典树全WA求调
737532
fantangsong楼主2024/7/26 16:26
#include<bits/stdc++.h>
#define in inline
using namespace std;
const int N=3e6+10;
int n,ans,tot=1;
int head[N],dis[N],vis[N],ch[32*N][2];
struct point{
	int nxt,to,w;
}edge[N*2];
in int read()
{
	int f=1,x=0;char c=getchar();
	while('9'<c||c<'0'){
		if(c=='-')f=-f;c=getchar();
	}
	while('0'<=c&&c<='9')
		x=x*10+c-'0',c=getchar();
	return x*f;
}
in void add(int u,int v,int w)
{
	edge[++tot].nxt=head[u],edge[tot].to=v;
	edge[tot].w=w,head[u]=tot;
	edge[++tot].nxt=head[v],edge[tot].to=u;
	edge[tot].w=w,head[v]=tot;
}
in void dfs(int x)
{
	int i,to;
	for(i=head[x];i;i=edge[i].nxt){
		to=edge[i].to;
		if(vis[to])continue;
		vis[to]=1,dis[to]=dis[x]^edge[i].w;
		dfs(to);
	}
}
in void insert(int x)
{
	int p=1,i,str;
	for(i=31;i;i--){
		str=(x>>i)&1;
		if(!ch[p][str])ch[p][str]=++tot;
		p=ch[p][str];
	}
}
in int query(int x)
{
	int lans=0,p=1,i,str;
	for(i=31;i;i--){
		str=((x>>i)&1)==1?0:1;
		if(ch[p][str])lans+=(1<<i);
		else str=(x>>i)&1;
		p=ch[p][str];
	}
	return lans;
}
int main()
{
	int u,v,w,i;n=read();
	for(i=1;i<n;++i){
		u=read()+1,v=read()+1,w=read();
		add(u,v,w);
	}
	vis[1]=1;dfs(1);
	for(i=1;i<=n;++i)insert(dis[i]);
	for(i=1;i<=n;++i)
		ans=max(ans,query(dis[i]));
	cout<<ans;
}
2024/7/26 16:26
加载中...