求助01trie
查看原帖
求助01trie
173323
Yukinoshita_Yukino楼主2021/11/22 19:45
#include<bits/stdc++.h>
using namespace std;
const int maxn=10000010;
struct edge{
	int w;
	int u;
	int next;
}e[maxn];
int head[maxn],cnt=0,n,sum[maxn];
int trie[maxn][2];
void add(int x,int y,int z)
{
	e[++cnt].w=z;
	e[cnt].next=head[x];
	e[cnt].u=y;
	head[x]=cnt;
}
void dfs(int fa,int x)
{
	for(int i=head[x];i;i=e[i].next)
	{
		int son=e[i].u;
		if(son!=fa)
		{
			sum[son]=sum[x]^e[i].w;
			dfs(x,son);
		}
	}
}
int maxx=1<<30,tot=0;
void build(int cnt,int id)
{
	for(int i=maxx;i;i>>=1)
	{
		if(!trie[id][sum[cnt]&i]) trie[id][sum[cnt]&i]=++tot;
		id=trie[id][sum[cnt]&i];
	}
}
int ask(int cnt,int id)
{
	int qwq=0;
	for(int i=maxx;i;i>>=1)
	{
		if(trie[id][!(i&sum[cnt])])
		{
			qwq+=i;
			id=trie[id][!(i&sum[cnt])];
		}
		else id=trie[id][i&sum[cnt]];
	}
	return qwq;
}
int main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
		add(b,a,c);
	}
	dfs(0,1);
	for(int i=1;i<=n;i++)
	{
		build(i,0);
	}
	int ans=-1;
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,ask(i,0));
	} 
	cout<<ans;
	return 0;
}

不知道哪错了,有RE有WA...

2021/11/22 19:45
加载中...