RT 代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include <algorithm>
using namespace std;
int n,m,p[1310],ans=-1,cnt,x[1310],y[1310],k;
void make_set(int x)
{
p[x]=x;
}
int find(int x)
{
if(x!=p[x])p[x]=find(p[x]);
return p[x];
}
void union_set(int x,int y)
{
p[y]=x;
}
struct Edge{
int u,v;
double w;
bool operator < (const Edge& rhs) const
{
return w<rhs.w;
}
}e[150010];
void kr()
{
sort(e+1,e+m+1);
for(int i=1;i<=n;i++)make_set(i);
for(int i=1;i<=m;i++)
{
int x=find(e[i].u),y=find(e[i].v);
if(x!=y)
{
union_set(x,y);
cnt++;
if(cnt==n-k+1)
{
printf("%.2lf",e[i].w);
}
}
}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
double s=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
m++;
e[m].u=i,e[m].v=j,e[m].w=s;
}
kr();
}