一位萌新寻求最小生成树帮助
  • 板块学术版
  • 楼主ychych
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/3/11 19:34
  • 上次更新2023/11/5 02:12:05
查看原帖
一位萌新寻求最小生成树帮助
411646
ychych楼主2021/3/11 19:34

题目见https://blog.csdn.net/daxian3723/article/details/102367485

#include<bits/stdc++.h>
double ans;
struct pz{
	double a,b;
}where[1005];
struct ll{
	int a,b;
	double c;
}a[1000005];
int father[1005];
bool mid(ll a,ll b){
	return a.c<b.c;
}
int get_father(int i){
	return father[i]==i?i:father[i]=get_father(father[i]);
}
double pigu(double x,double x1,double y,double y1)
{
	double i=(x-x1)*(x-x1);
	double j=(y-y1)*(y-y1);
	return sqrt(i+j);
}
using namespace std;
int main(){
	int n,m;
	int l=1;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lf%lf",&where[i].a,&where[i].b);
	}
	for(int i=1;i<=n;i++){
		father[i]=i;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[l].c=pigu(where[i].a,where[j].a,where[i].b,where[j].b);
			l++;
		}
	}
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		father[x]=y;
	}
	sort(a+1,a+1+l,mid);
	int cnt=0;
	for(int i=1;i<=l&&cnt<n-1;i++){
		int x=get_father(a[i].a);
		int y=get_father(a[i].b);
		if(x!=y){
			ans+=a[i].c;
			father[x]=y;
		}
	}
	cout<<ans;
	return 0;
}

不知为何只输出0,望各位大佬解答本蒟蒻的问题

2021/3/11 19:34
加载中...