蒟蒻求助
查看原帖
蒟蒻求助
540177
wyf_sinon楼主2023/3/27 19:37

有大佬能讲一下我37行写continue与break的区别吗 continue过了break WA了一半记忆化没过关 下面是代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+1;
int trie[N*31][2],enter[N],last[N],head[N],ww[N],idx,id;
int n,s[N];
void insert(int x){
	int p=0;
	for(int i=30;i>=0;i--){
		bool u=x>>i&1;
		if(!trie[p][u]) trie[p][u]=++id;
		p=trie[p][u];
	}
}
int query(int x){
	int p=0,res=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(trie[p][!u]){
			p=trie[p][!u];
			res+=1<<i;
		}else p=trie[p][u];
	}
	return res;
}
void add(int a,int b,int w){
	enter[idx]=b;last[idx]=head[a];ww[idx]=w;head[a]=idx++;
}
void dfs(int x,int come){
	if(x==1){
		s[x]=ww[head[x]];
		return;
	}
	for(int i=head[x];i!=0;i=last[i]){
		if(enter[i]==come) continue;
		if(s[enter[i]]){
			s[x]=(s[enter[i]]^ww[i]);
			continue;//-------------------37----------------------
		}else{
			dfs(enter[i],x);
			s[x]=(s[enter[i]]^ww[i]);
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);add(v,u,w);//new
	}
	for(int i=1;i<=n;i++){
		dfs(i,-1);
	}
	for(int i=1;i<=n;i++){
		insert(s[i]);
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		ans=max(ans,query(s[i]));
	}
	cout<<ans<<endl;
	return 0;
}

感谢解答

2023/3/27 19:37
加载中...