50分,求助
查看原帖
50分,求助
467683
return_CE楼主2021/8/4 23:27
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct point
{
	int x,y;
	long long v;
}a[9903];
int fat[9903],n,i,j,x,m=0,k=0,b;
long long tot=0;
int father(int x)
{
	if(fat[x]!=x) fat[x]=father(fat[x]);
	return fat[x];	
}
void unionn(int x,int y)
{
	int fa=father(x);
	int fb=father(y);
	if(fa!=fb) fat[fa]=fb;
}
int cmp(point a,point b)
{
	if(a.v<b.v) return 1;
		else return 0;
}
int main()
{
	//freopen("   ","r",stdin);
	//freoprn("    ","w",stdout);
	cin>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++){
			cin>>x;
			if(x!=0){
				m++;
				a[m].x=i;
				a[m].y=j;
				a[m].v=x;
			}
		}
	cin>>b;
	for(i=1;i<=n;i++) fat[i]=i;
	sort(a+1,a+m+1,cmp);
	for(i=1;i<=m;i++){
		if(father(a[i].x!=father(a[i].y))){
			unionn(a[i].x,a[i].y);
			tot+=a[i].v;
			k++;
		}
		if(k==(n-1)) break;
	}
	cout<<tot;
	return 0;
}
2021/8/4 23:27
加载中...