RT,40分。代码如下:
#include<bits/stdc++.h>
using namespace std;
const int ma=1000005;
int n,m,f[ma];
struct node
{
int u,v;
double w;
}a[ma];
bool cmp(const node a,const node b)
{
return a.w<b.w;
}
int sfind(int q)
{
if(f[q]==q)return q;
else
{
f[q]=sfind(f[q]);
return f[q];
}
}
bool merge(int x,int y)
{
int t1=sfind(x);
int t2=sfind(y);
if(t1!=t2)
{
f[t1]=t2;return true;
}
return false;
}
int main()
{
int i,j,k=0;
double x[ma],y[ma];
cin>>n>>m;
for(i=1;i<=m;i++)
{
f[i]=i;
}
for(i=1;i<=m;i++)
{
cin>>x[i]>>y[i];
}
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
k++;
a[k].u=i;a[k].v=j;
a[k].w=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
sort(a+1,a+k+1,cmp);
int count=0;
double ans;
for(i=1;i<=k;i++)
{
if(merge(a[i].u,a[i].v))
{
count++;if(count>n)break;ans=a[i].w;
}
}
cout<<fixed<<setprecision(2)<<ans<<endl;
return 0;
}