50分,回复必关。
查看原帖
50分,回复必关。
755531
zz2013楼主2023/1/7 19:48
#include<bits/stdc++.h>
using namespace std;
int fa[110];
struct node{
	int i,j,w;
}a[110];
int find(int x){
	if(fa[x]==x){
		return x;
	}
	return fa[x]=find(fa[x]);
}
void build(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx==fy){
		return;
	}
	fa[fx]=fy;
}
bool same_set(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx==fy){
		return 1;
	}
	return 0;
}
bool cmp(node i,node j){
	return i.w<j.w;
}
int main(){
	int n,cnt=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int x;
			cin>>x;
			if(j>i){
				cnt++;
				a[cnt].i=i;
				a[cnt].j=j;
				a[cnt].w=x;
			}
		}
	}
	sort(a+1,a+cnt+1,cmp);
	int sum=0;
	for(int i=1;i<=cnt;i++){
		if(same_set(a[i].i,a[i].j)==0){
			sum+=a[i].w;
			build(a[i].i,a[i].j);
		}
	}
	cout<<sum;
	return 0;
}
2023/1/7 19:48
加载中...