고양이를 구하라
시간 제한8초메모리 제한512 MB
서로 교차하지 않는 울타리로 만든 평면 그래프에서 고양이가 갇히지 않도록 울타리를 없앨 때, 없앤 길이의 합을 최소로 하는 값을 구한다.
문제
Nicholas Y. Alford는 고양이를 좋아했다. 그는 마을에 정원을 두고 그 정원에서 고양이를 많이 길렀다. 고양이들이 너무 귀여워서 마을 사람들도 고양이를 좋아했다.
어느 날 못된 마녀가 마을에 찾아왔다. 마녀는 모든 사람에게 사랑받는 고양이들을 시기했다. 마녀는 정원에 마법의 말뚝을 박고, 말뚝 사이를 잇는 마법의 울타리로 고양이들을 가두었다. 마녀는 "너희 고양이들은 못생긴 늙은 고양이가 될 때까지 이 울타리 안에 갇혀 있을 것이다"라고 저주하듯 말하고 떠났다.
Nicholas는 망치로 울타리를 부수려 했지만, 울타리는 그의 힘으로는 부술 수 없었다. 그는 교회에 가서 신부에게 도움을 청했다. 신부는 책에서 마법의 울타리를 파괴하는 방법을 찾았고, 성수로 울타리를 파괴할 수 있다는 것을 알아냈다. 울타리 하나를 파괴하는 데 필요한 성수의 양은 울타리의 길이에 비례했다. 그러나 성수는 꽤 비쌌다. 그래서 그는 모든 고양이를 구하는 데 필요한 최소한의 성수만 사기로 했다. 성수는 얼마나 필요할까?
입력
입력은 다음 형식으로 주어진다:
N M
x1 y1
.
.
.
xN yN
p1 q1
.
.
.
pM qM
입력의 첫 줄에는 두 정수 N (2 ≤ N ≤ 10000)과 M (1 ≤ M)이 주어진다. N은 마법의 말뚝의 개수이고 M은 마법의 울타리의 개수이다. 다음 N개의 줄에는 말뚝의 좌표가 주어진다. 각 줄에는 두 정수 xi와 yi (-10000 ≤ xi, yi ≤ 10000)가 주어진다. 다음 M개의 줄에는 울타리의 양 끝이 주어진다. 각 줄에는 두 정수 pj와 qj (1 ≤ pj, qj ≤ N)가 주어진다. 이는 pj번째 말뚝과 qj번째 말뚝 사이에 울타리가 있음을 나타낸다.
다음을 가정할 수 있다:
- 같은 좌표를 가진 말뚝은 없다.
- 말뚝은 울타리 중간에 놓이지 않는다.
- 울타리는 서로 교차하지 않는다.
- 각 닫힌 영역 안에는 고양이가 적어도 한 마리 있다.
- 울타리를 부분적으로 파괴하는 것은 불가능하다.
- 마법의 울타리 길이 1단위를 파괴하는 데 성수 1단위가 필요하다.
출력
모든 고양이를 구하는 데 필요한 최소한의 성수의 양을 한 줄에 출력한다. 소수점 이하 자릿수는 얼마든지 출력해도 된다. 단, 절대 오차는 0.001 이하여야 한다.