1 条题解
-
0

#include<bits/stdc++.h> using namespace std; const int N=510; struct edge{int x,y;double c;}e[N*N],s[N];int elen; int n,m,fa[N]; double dist(int X1,int Y1,int X2,int Y2) { double x=(double)(X1-X2); double y=(double)(Y1-Y2); return sqrt(x*x+y*y); } bool cmp(edge n1,edge n2){return n1.c<n2.c;} int findfa(int x){return fa[x]==x?x:fa[x]=findfa(fa[x]);} double kruskal() { sort(e+1,e+1+elen,cmp); for(int i=1;i<=n;i++)fa[i]=i; int t=0;double ans=0; for(int i=1;i<=elen;i++) { int tx=findfa(e[i].x),ty=findfa(e[i].y); if(tx!=ty) { fa[tx]=ty; if(++t==n-1-(m-1)) { ans=e[i].c; break; } } } return ans; } int main() { scanf("%d%d",&m,&n);elen=0; for(int i=1;i<=n;i++)scanf("%d%d",&s[i].x,&s[i].y); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { double d=dist(s[i].x,s[i].y,s[j].x,s[j].y); e[++elen]={i,j,d}; } printf("%.2f\n",kruskal()); return 0; }
- 1
信息
- ID
- 1476
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 151
- 已通过
- 37
- 上传者