#P5677. 修建道路

修建道路

题目描述

FarmerJohn{Farmer John}最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农场)。

有些农场之间原本就有道路相连。所有N(1<=N<=1,000){N(1 <= N <= 1,000)}个农场(用1..N{1..N}顺次编号)在地图上都表示为坐标为(Xi,Yi){(X_i, Y_i)}的点(0<=Xi<=1,000,000{(0 <= X_i <= 1,000,000}0<=Yi<=1,000,000){0 <= Y_i <= 1,000,000),}两个农场间道路的长度自然就是代表它们的点之间的距离。

现在FarmerJohn{Farmer John}也告诉了你农场间原有的M(1<=M<=1,000){M(1 <= M <= 1,000)}条路分别连接了哪两个农场,

他希望你计算一下,为了使得所有农场连通,他所需建造道路的最小总长是多少。

输入格式

1{1}行: 2{2}个用空格隔开的整数:N{N }M{M}

2..N+1{2..N+1}行: 第i+1{i+1}行为2{2}个用空格隔开的整数:Xi{X_i}Yi{Y_i }

N+2..N+M+2{N+2..N+M+2}行: 每行用2{2}个以空格隔开的整数i{i}j{j}描述了一条已有的道路, 这条道路连接了农场i{i}和农场j{j}

输出格式

1{1}行:

输出使所有农场连通所需建设道路的最小总长,保留2{2}位小数,不必做 任何额外的取整操作。

为了避免精度误差,计算农场间距离及答案时请使用64{64}位实型变量

样例

输入样例

4 1
1 1
3 1
2 3
4 3
1 4

输出样例

4.00

提示

输入说明:

FJ{FJ}一共有4{4}个坐标分别为(1,1){(1,1),}(3,1){(3,1),}(2,3){(2,3),}(4,3){(4,3)}的农场。农场1{1}和农场 4{4}之间原本就有道路相连。

输出说明:

FJ{FJ}选择在农场1{1}和农场2{2}间建一条长度为2.00{2.00}的道路,在农场3{3}和农场4{4}间建一 条长度为2.00{2.00}的道路。这样,所建道路的总长为4.00{4.00,}并且这是所有方案中道路 总长最小的一种。