tire算法28pts求助
查看原帖
tire算法28pts求助
95170
Tune_楼主2024/6/1 17:41

评测记录

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll e[5000005][2],a[100005],n;
struct dataa
{
	ll to,val;
};
vector<dataa> edge[1000006];
int cnt=0;
void inser(int x)
{
	ll p=0;
	for(ll i=32;i>=0;i--)
	{
		ll s=(x>>i)&1;
		if(e[p][s]==0)
			e[p][s]=++cnt;
		p=e[p][s];
	}
}
ll gets(ll x)
{
	ll p=0,ans=0;
	for(ll i=32;i>=0;i--)
	{
		ll s=(x>>i)&1;
		if(e[p][s^1]==0)
			p=e[p][s];
		else
		{
			p=e[p][s^1];
			ans=ans^(1<<i);
		}
	}
	return ans;
}
void dfs(ll now,ll s,ll fa)
{
	a[now]=s;
	inser(s);
	for(int i=0;i<edge[now].size();i++)
		if(edge[now][i].to!=fa)
			dfs(edge[now][i].to,s^edge[now][i].val,now);
}
int main()
{
	scanf("%lld",&n);
	for(ll i=1;i<n;i++)
	{
		ll u,v,w;
		scanf("%lld%lld%lld",&u,&v,&w);
		edge[u].push_back({v,w});
		edge[v].push_back({u,w});
	}
	dfs(1,0,0);
	ll maxn=0;
	for(int i=1;i<=n;i++)
		maxn=max(maxn,gets(a[i]));
	printf("%lld",maxn);
	return 0;
}
2024/6/1 17:41
加载中...