kruskal求助
查看原帖
kruskal求助
393674
jixiang楼主2021/7/27 11:01
#include<bits/stdc++.h>
using namespace std;
int p,s,cnt,num;
int fa[1009];

int getfa(int x) {
	if(fa[x]!=x)return fa[x]=getfa(fa[x]);
	else return x;
}

struct node {
	int x,y;
	void input() {
		scanf("%d%d",&x,&y);
	}
} b[1009];

struct edge {
	int in,out;
	double w;
	void input(int x,int y) {
		in=x;
		out=y;
		w=(double)(b[in].x-b[out].x)*(double)(b[in].x-b[out].x)+(double)(b[in].y-b[out].y)*(double)(b[in].y-b[out].y);
		w=sqrt(w);
	}
} a[1000009];


bool cmp(edge l,edge k) {
	return l.w<k.w;
}

int main() {

	cin>>p>>s;
	for(int i=1; i<=p; i++)b[i].input(),fa[i]=i;

	for(int i=1; i<p; i++)
		for(int j=i+1; j<=p; j++)a[++cnt].input(i,j);

	sort(a+1,a+1+cnt,cmp);

	for(int i=1; i<=cnt; i++) {
		int f=a[i].in;
		f=getfa(f);
		int t=a[i].out;
		t=getfa(t);
		if(f!=t)fa[f]=t,num++;

		if(num==p-s) {
			printf("%.2lf",a[i].w);
			return 0;
		}
	}

}
2021/7/27 11:01
加载中...