10pts求助
查看原帖
10pts求助
599287
_masppy_楼主2023/7/14 20:37

预处理对局情况跑了个最大生成树,除了第一个点都WA了(我太菜了)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=4e6+10;
int n,m;
ll fa[maxn],h[maxn],id[maxn];
struct node{
	int u,v,w;
}q[maxn];

int find_root(int x){
	if(fa[x]==x) return x;
	return fa[x]=find_root(fa[x]);
}

bool cmp(node a,node b){
	return a.w>b.w;
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		fa[i]=i;	
	}
	
	for(int i=1;i<=n;i++){
		scanf("%lld",&id[i]);
	}
	
	int cnt=0;
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			q[++cnt].u=i;
			q[cnt].v=j;
			q[cnt].w=id[i]^id[j];
		}
	}
	
	sort(q+1,q+1+cnt,cmp);
	
	int ans=0;
	int cnt1=0;
	for(int i=1;i<=cnt;i++){
		int x=find_root(q[i].u);
		int y=find_root(q[i].v);
		if(x!=y){
			ans+=q[i].w;
			fa[x]=y;
			cnt1++;
		}
		if(cnt1==n-1) break;
	}
	
	printf("%lld",ans);
	return 0;
}

2023/7/14 20:37
加载中...