点击打开链接
#include"stdio.h"
#include"math.h"
#include"stdlib.h"
int set[5001];
struct node
{
double x,y,point;
}aa[5001];
int cmp(const void*a,const void*b)
{
return (*(struct node*)a).point>(*(struct node*)b).point?1:-1;
}
int find(int x)
{
int r,i;
r=x;
while(set[r]!=r)
r=set[r];
while(set[x]!=r)
{
i=set[x];
set[x]=r;
x=i;
}
return r;
}
int main()
{
int i,j,k,n,x,y;
double t,xx[101],yy[101],ans;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<=5000;i++)
set[i]=i;
for(i=0;i<n;i++)
scanf("%lf%lf",&xx[i],&yy[i]);
k=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
t=sqrt((xx[i]-xx[j])*(xx[i]-xx[j])+(yy[i]-yy[j])*(yy[i]-yy[j]));
aa[k].x=i;
aa[k].y=j;
aa[k++].point=t;
}
}
ans=0;
qsort(aa,k,sizeof(aa[0]),cmp);
for(i=0;i<k;i++)
{
x=find(aa[i].x);
y=find(aa[i].y);
if(x!=y)
{
ans+=aa[i].point;
set[x]=y;
}
}
printf("%.2f\n",ans);
}
return 0;
}