标签:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<string> using namespace std; int n,k,a[1001][2],fa[1001]; double dist(int x,int y) { return sqrt(double((a[x][0]-a[y][0])*(a[x][0]-a[y][0])+(a[x][1]-a[y][1])*(a[x][1]-a[y][1]))); } struct node { int x,y; double z; }e[1000001]; bool cmp(node aa,node bb) { return aa.z<bb.z; } int find(int x) { if(x!=fa[x]) fa[x]=find(fa[x]); return fa[x]; } int main() { int cnt; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i][0],&a[i][1]); fa[i]=i; } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { e[++cnt].x=i,e[cnt].y=j; e[cnt].z=dist(i,j); } } //printf("111\n"); sort(e+1,e+1+cnt,cmp); //printf("222\n"); for(int i=1;i<=cnt;i++) { int x,y,fx,fy; x=e[i].x,y=e[i].y; fx=find(x),fy=find(y); if(fx!=fy) { if(n>k) { n--; fa[fx]=fy; } else { printf("%.2f\n",e[i].z); return 0; } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/water-full/p/4475470.html