#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <cstdlib> #include <cmath> #include <set> #include <map> #include <vector> #include <cstring> #define INF 100000000 using namespace std; int n,m; int x[1005]; int y[1005]; int fa[1005]; struct node{ int x,y,w; bool operator < (const node& a)const{ return w > a.w; } }; int fun(int x){ return fa[x] == x ? x : fa[x] = fun(fa[x]); } int main(){ while(cin >> n){ for(int i = 1;i <= n;i++){ scanf("%d%d",&x[i],&y[i]); } priority_queue<node> que; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(i == j) continue; node a; a.x = i; a.y = j; a.w = (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]); que.push(a); } } for(int i = 1;i <= n;i++){ fa[i] = i; } int m; cin >> m; for(int i = 0;i < m;i++){ int a,b; scanf("%d%d",&a,&b); fa[fun(a)] = fun(b); } double ret = 0; while(!que.empty()){ node a = que.top(); que.pop(); if(fun(a.x) != fun(a.y)){ ret += sqrt(a.w); fa[fun(a.x)] = fun(a.y); } } printf("%.2f\n",ret); } return 0; }
时间: 2024-09-30 16:27:00