P2872
code:
#include<bits/stdc++.h>
using namespace std;
struct len
{
int u,v;
double d;
};
struct point
{
int x,y;
};
const int MN=1000005;
int f[MN];
len b[MN];
point a[MN];
int find(int x)
{
return x==f[x]?x:f[x]=find(f[x]);
}
double sq(int x1,int y1,int x2,int y2)
{
return sqrt((double)(x1-x2)*(x1-x2)+(double)(y1-y2)*(y1-y2));
}
bool cmp(len a,len b)
{
if (a.d==b.d)
{
return a.u<b.u;
}
return a.d<b.d;
}
int main(void)
{
int n,m,cnt=0;
double s=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
f[i]=i;
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
b[++cnt].u=i;
b[cnt].v=j;
b[cnt].d=sq(a[b[i].u].x,a[b[i].u].y,a[b[i].v].x,a[b[i].v].y);
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b[++cnt].u,&b[cnt].v);
b[cnt].d=0;
}
sort(b+1,b+cnt+1,cmp);
for(int i=1;i<=cnt;i++)
{
int p=find(b[i].u),q=find(b[i].v);
if (p!=q)
{
f[p]=q;
s+=b[i].d;
}
}
printf("%.2lf",s);
return 0;
}