只有60pts
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int n,m,f[1000001],tmp;
double ans;
int x[1000001],y[1000001];
struct Node{
int xx,yy;
double val;
}a[1000001];
bool cmp(Node a,Node b){
if (a.val==b.val) {
return a.xx<b.xx;
}
return a.val<b.val;
}
double valun(int m,int n) {
return double(sqrt(double((x[m]-x[n])*(x[m]-x[n]))+double((y[m]-y[n])*(y[m]-y[n]))));
}
int find(int x) {
if (f[x]==x) {
return x;
}
return f[x]=find(f[x]);
}
int main() {
cin>>n>>m;
for (int i=1;i<=n;i++) {
cin>>x[i]>>y[i];
}
for (int i=1;i<=n;i++) {
f[i]=i;
}
for (int i=1;i<=n;i++) {
for (int j=i+1;j<=n;j++) {
a[++tmp].xx=i;
a[tmp].yy=j;
a[tmp].val=valun(i,j);
}
}
for (int i=1;i<=m;i++) {
int A,B;
cin>>A>>B;
a[++tmp].xx=A;
a[tmp].yy=B;
a[tmp].val=0;
}
sort(a+1,a+tmp+1,cmp);
for (int i=1;i<=tmp;i++) {
int nx=find(a[i].xx);
int ny=find(a[i].yy);
if (nx!=ny) {
f[nx]=ny;
ans+=a[i].val;
}
}
printf("%.2lf",ans);
return 0;
}