//// main.cpp// eoj2067//// Created by whyisyoung on 3/15/14.// Copyright (c) 2014 whyisyoung. All rights reserved.//#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>usingnamespacestd;constintmaxn=1002;constdoubleMAXDIS=10000000;// 这里写成 int 真是 WTF!!!doubleX[maxn],Y[maxn];doublecost[maxn][maxn];doublelowcost[maxn];doubleans=0;voidget_all_cost(doubleX[],doubleY[],intN){for(inti=1;i<=N;++i){for(intj=1;j<=N;++j){if(i==j)cost[i][j]=0;elsecost[i][j]=sqrt((double)(X[i]-X[j])*(X[i]-X[j])+(double)(Y[i]-Y[j])*(Y[i]-Y[j]));}}}doubleprim(intN){ans=0;for(inti=1;i<=N;++i){lowcost[i]=cost[1][i];}intk=0;for(inti=1;i<N;++i){doublemin=MAXDIS;// 这里写成 int 真是 WTF!!!for(intj=1;j<=N;++j){if(lowcost[j]!=0&&lowcost[j]<min){min=lowcost[j];k=j;}}if(min==MAXDIS)// 找不到新的点可以加入到树中break;if(min!=-1)ans+=min;lowcost[k]=0;// 将顶点 k 加入到最小生成树中for(intj=1;j<=N;++j){if(lowcost[j]!=0&&cost[k][j]<lowcost[j]){lowcost[j]=cost[k][j];}}}returnans;}intmain(){intN,M;intx,y;while(scanf("%d%d",&N,&M)!=EOF){for(inti=1;i<=N;++i){scanf("%lf%lf",&X[i],&Y[i]);}get_all_cost(X,Y,N);for(inti=0;i<M;++i){scanf("%d%d",&x,&y);cost[x][y]=-1;cost[y][x]=-1;}ans=prim(N);printf("%.2lf\n",ans);}return0;}
//// main.cpp// eoj2067//// Created by whyisyoung on 3/15/14.// Copyright (c) 2014 whyisyoung. All rights reserved.//#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>usingnamespacestd;constintmaxn=1002;constdoubleMAXDIS=10000000;doubleX[maxn],Y[maxn];boolvisit[maxn];//记录某点是否访问过,即是否已加入到最小生成树中doublecost[maxn][maxn];doublelowcost[maxn];doubleans=0;voidget_all_cost(doubleX[],doubleY[],intN){for(inti=1;i<=N;++i){for(intj=1;j<=N;++j){if(i==j)cost[i][j]=0;elsecost[i][j]=sqrt((double)(X[i]-X[j])*(X[i]-X[j])+(double)(Y[i]-Y[j])*(Y[i]-Y[j]));}}}doubleprim(intN){ans=0;for(inti=1;i<=N;++i){lowcost[i]=cost[1][i];}visit[1]=1;intk=0;for(inti=1;i<N;++i){doublemin=MAXDIS;for(intj=1;j<=N;++j){if(!visit[j]&&lowcost[j]<min){min=lowcost[j];k=j;}}if(min==MAXDIS)// 找不到新的点可以加入到树中break;visit[k]=1;// k 已被访问过ans+=min;for(intj=1;j<=N;++j){if(!visit[j]&&cost[k][j]<lowcost[j]){lowcost[j]=cost[k][j];}}}returnans;}intmain(){intN,M;intx,y;while(scanf("%d%d",&N,&M)!=EOF){memset(visit,0,sizeof(visit));for(inti=1;i<=N;++i){scanf("%lf%lf",&X[i],&Y[i]);}get_all_cost(X,Y,N);for(inti=0;i<M;++i){scanf("%d%d",&x,&y);cost[x][y]=0;cost[y][x]=0;}ans=prim(N);printf("%.2lf\n",ans);}return0;}