虽然可以AC 但是不是最好的解法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct line
{
int begin,end;
double d;
}line;
line l[10005];
double x[101],y[101];
int f[10005],t;
int cmp(const void *a,const void *b)
{
return (*(line*)a).d>(*(line*)b).d?1:-1;
}
int find(int n)
{
while(f[n]>0)
n=f[n];
return n;
}
double kruskal()
{
int i,m,n;
double re=0.0;
qsort(l,t,sizeof(line),cmp);
for(i=0;i<t;i++)
{
m=find(l[i].begin);
n=find(l[i].end);
if(m!=n)
{
f[m]=n;
re += l[i].d;
}
}
return re;
}
int main()
{
int n;
int i,k;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%lf%lf",&x[i],&y[i]);
t=0;
for(i=0;i<n;i++)
{
for(k=i+1;k<n;k++)
{
l[t].begin=i;
l[t].end=k;
l[t].d = (sqrt)((x[k]-x[i])*(x[k]-x[i])+(y[k]-y[i])*(y[k]-y[i]));
t++;
}
}
memset(f,0,sizeof(f));
printf("%.2lf\n",kruskal());
}
return 0;
}