关于题意与答案的疑问
查看原帖
关于题意与答案的疑问
482130
Kx_Triumphs楼主2024/8/15 19:29

题面中要求求两点间所有边权的异或和,但为何正确答案需输出点到根节点的亦或和,而不是选中边与搜到的边的亦或和?

//9pts 两条边亦或后,再与答案取max
int query(int a){
	int pos=0,sum=0;
	for(int i=31;i>=0;i--){
		int c=(a>>i)&1;
		if(tr[pos][!c]){
			sum+=(1<<i);
			pos=tr[pos][!c];
		}
		else pos=tr[pos][c];
	}
	return a^sum;
}
//main中
	int ans=-1;
	for(int i=1;i<=n;i++){
		ans=max(ans,query(dis[i]));
	}
	cout<<ans;

//100pts 两条边直接取max
int query(int a){
	int pos=0,sum=0;
	for(int i=31;i>=0;i--){
		int c=(a>>i)&1;
		if(tr[pos][!c]){
			sum+=(1<<i);
			pos=tr[pos][!c];
		}
		else pos=tr[pos][c];
	}
	return sum;
}
//main中
	int ans=-1;
	for(int i=1;i<=n;i++){
		ans=max(ans,query(dis[i]));
	}
	cout<<ans;
2024/8/15 19:29
加载中...