10分求助
查看原帖
10分求助
495193
Regan552楼主2022/3/26 00:09
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct edge{
	int from,to;
	double w;
}; 
edge e1[1000005];
edge e2[5005];
int node[1005][2];
int fa[1005],fa1[1005];
int n,k;
int cnt,cnt1;
double dis(int u,int v)
{
	return (double)(sqrt(((double)node[u][0]-node[v][0])*(node[u][0]-node[v][0])+(double)(node[u][1]-node[v][1])*(node[u][1]-node[v][1])));
}
int cmp(edge e,edge e3)
{
	return e.w<e3.w;
}
int find(int x)
{
	if(fa[x]!=x)
	{
		fa[x]=find(fa[x]);
	}
	return fa[x];
}
void add(int u,int v,int w)
{
	e2[++cnt1].from=u;
	e2[cnt1].to=v;
	e2[cnt1].w=w;
}
void kruaskl();
int main()
{
	cin>>n>>k;
	int u,v;
	for(int i=1;i<=n;i++)
	{
		cin>>node[i][0]>>node[i][1];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			e1[++cnt].from=i;
			e1[cnt].to=j;
			e1[cnt].w=dis(i,j);
		}
	}
	kruaskl();
	//sort(e2+1,e2+1+cnt1,cmp);
	printf("%.2lf",e2[n-k+1].w);
}
void kruaskl()
{
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
	}
	sort(e1+1,e1+1+cnt,cmp);
	for(int i=1;i<=cnt;i++)
	{
		int u=e1[i].from,v=e1[i].to;
		int uu=find(u);
		int vv=find(v);
		if(uu!=vv)
		{
			add(u,v,e1[i].w);
			fa[uu]=vv;
			
		}
	}
}
2022/3/26 00:09
加载中...