RT,样例二未过,谢谢
#include <bits/stdc++.h>
using namespace std;
int n,k,fa[1005],cnt;
struct pos{
int x,y;
}a[1005];
struct edge{
int u,v;
double w;
}e[10000005];
double dis(int x,int y){
return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y));
}
bool cmp(edge x,edge y){
return x.w<y.w;
}
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
void kruskal(){
int tmp=0;
sort(e+1,e+cnt+1,cmp);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=cnt;i++){
int fu=find(e[i].u);
int fv=find(e[i].v);
cout<<fu<<' '<<fv<<endl;
if(fu!=fv){
fa[fv]=fu;
tmp++;
}
if(tmp==k){
printf("%.2lf",e[i].w);
break;
}
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(i!=j){
e[++cnt].u=i;
e[cnt].v=j;
e[cnt].w=dis(i,j);
}
}
}
kruskal();
return 0;
}