神秘RE求调
查看原帖
神秘RE求调
682028
_awa_keyai楼主2023/8/7 17:05

10pts。其他RE。

#include<bits/stdc++.h>

using namespace std;

inline int read(){
	int ret=0,f=1;
	char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-f;
	for(;c>='0'&&c<='9';c=getchar()) ret=ret*10+c-'0';
	return ret*f;
}
const int maxn=2000001;
struct awa{
	int to,ne,w;
}edge[maxn*4];
int head[maxn*4],cnt=-1;
void add(int x,int y,int w){
	edge[++cnt].ne=head[x];
	edge[cnt].to=y;
	edge[cnt].w=w;
	head[x]=cnt;
}
int sum[maxn];
void dfs(int x,int fa){
	for(int i=head[x];~i;i=edge[i].ne){
		int to=edge[i].to;
		int w=edge[i].w;
		if(to!=fa){
			sum[to]=sum[x]^w;
			dfs(to,x);
		} 
	}
}
int n;

struct trie{
	char ch[3];
}t[maxn];
int tot;
void build(int v,int x){
	for(int i=(1<<30);i;i>>=1){
		bool c=v&i;
		if(!t[x].ch[c]){
			t[x].ch[c]=++tot;
		}
		x=t[x].ch[c];
	}
}
int _qu(int v,int x){
	int ans=0;
	for(int i=(1<<30);i;i>>=1){
		bool c=v&i;
		if(t[x].ch[!c]){
			ans+=i;
		
		} else {
			x=t[x].ch[!c];
		}	
	}
	return ans;
}

signed main(void){
	memset(head,-1,sizeof head);
	n=read();
	for(int i=1;i<n;i++){
		int u,v,w;
		u=read();v=read();w=read();
		add(u,v,w);
		add(v,u,w);
	}
	
	dfs(1,-1);
	for(int i=1;i<=n;i++){
		build(sum[i],0);
	}
	
	int ans=0;
    for(int i=1;i<=n;++i){
        ans=max(ans,_qu(sum[i],0));
//        cout<<_qu(sum[i],0)<<endl;
//        cout<<sum[i]<<endl;
    }
    printf("%d\n",ans);
	
	return 0;
}
2023/8/7 17:05
加载中...