40分求助
查看原帖
40分求助
1044332
Three_no楼主2023/11/24 13:25

题目

#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int fa[N],s,p,a[N],b[N];
double mincost;
int find(int x){
	if(fa[x]==x) return x;
	else return fa[x]=(find(fa[x]));
}
void init(int n){
	for(int i=1;i<=n;i++) fa[i]=i;
}
struct node{
	int x,y;
	double z;
}e[N];
bool cmp(node x,node y){
	return x.z<y.z;
}
int main(){
	cin>>s>>p;
	init(p);
	int ans=0;
	for(int i=1;i<=p;i++){
		cin>>a[i]>>b[i];
		for(int j=1;j<i;j++){
			ans++;
			e[ans].z=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
			e[ans].x=i;
			e[ans].y=j;
		}
	}
	sort(e+1,e+ans+1,cmp);
	int ans1=0;
	for(int i=1;i<=ans;i++){
		int fx=find(e[i].x);
		int fy=find(e[i].y);
		if(fx!=fy){
			fa[fx]=fy;
			mincost=e[i].z;
			ans1++;
		}
		if(ans1==p-s) break;
	}
	printf("%.2lf",mincost);
	
	return 0;
} 

求助40分

2023/11/24 13:25
加载中...