아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

고양이를 구하라

시간 제한8초메모리 제한512 MB

요약
서로 교차하지 않는 울타리로 만든 평면 그래프에서 고양이가 갇히지 않도록 울타리를 없앨 때, 없앤 길이의 합을 최소로 하는 값을 구한다.
난이도

보통10점 중 7점

유형
최소 신장 트리, 그래프, 기하, 그리디
정답자
아직 제출이 없습니다

문제

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 이하여야 한다.

예제4

  1. 예제 1

    입력
    3 3
    0 0
    3 0
    0 4
    1 2
    2 3
    3 1
    
    예상 출력
    3.000
    
  2. 예제 2

    입력
    4 3
    0 0
    -100 0
    100 0
    0 100
    1 2
    1 3
    1 4
    
    예상 출력
    0.000
    
  3. 예제 3

    입력
    6 7
    2 0
    6 0
    8 2
    6 3
    0 5
    1 7
    1 2
    2 3
    3 4
    4 1
    5 1
    5 4
    5 6
    
    예상 출력
    7.236
    
  4. 예제 4

    입력
    6 6
    0 0
    0 1
    1 0
    30 0
    0 40
    30 40
    1 2
    2 3
    3 1
    4 5
    5 6
    6 4
    
    예상 출력
    31.000