全RE求助
查看原帖
全RE求助
1123452
czh___楼主2024/3/19 20:00
#include<bits/stdc++.h>
#define int long long
using namespace std;
int fa[30001],n,cnt,ans,a[30001];
struct aaa{
	int u,v,w;
}e[1000001];
inline bool cmp(aaa a,aaa b){
	return a.w<b.w;
}
inline int find_root(int x){
	if(fa[x]==x)
		return x;
	fa[x]=find_root(fa[x]);
}
signed main(){
	scanf("%d",&n);
	for(int i=1;i<=n+1;i++)
		fa[i]=i;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int x;
			scanf("%d",&x);
			if(i==j){
				e[++cnt].u=i;
				e[cnt].v=n+1;
				e[cnt].w=a[i];
			}
			else{
				e[++cnt].u=i;
				e[cnt].v=j;
				e[cnt].w=x;
			}
		}
	}
	stable_sort(e+1,e+1+cnt,cmp);
	for(int i=1;i<=cnt;i++){
		int bx=find_root(e[i].u);
		int by=find_root(e[i].v);
		if(bx!=by){
			fa[bx]=by;
			ans+=e[i].w;
		}
	}
	printf("%d",ans);
	return 0;
}
2024/3/19 20:00
加载中...