섬 둘레에 울타리 치기

시간 제한1초메모리 제한128 MB

요약
서로 떨어진 다각형 섬들의 변 N개와 정점 간 대칭 뱃삯 행렬이 주어질 때, 아무 정점에서 시작해 모든 섬을 울타리로 둘러싸는 최소 왕복 비용을 구한다.
난이도

어려움10점 중 8점

유형
그래프, 최소 신장 트리, 유니온 파인드, 구현
정답자
아직 제출이 없습니다

문제

농부 존이 여러 개의 섬으로 이루어진 큰 농장을 사서 젖소를 키우려 한다. 그는 모든 섬의 둘레에 울타리를 치고 싶어 한다.

각 섬은 다각형 모양이다. 존은 한 섬을 시계 방향으로 돌면서 이웃한 두 꼭짓점 사이를 한 변씩 울타리로 잇는다. 한 섬의 둘레를 걸어서 도는 데에는 비용이 들지 않는다.

모든 섬에 울타리를 치려면 배를 타고 다른 섬으로 건너가야 한다. 존은 아무 꼭짓점에서나 울타리 치기를 시작할 수 있고, 지나는 임의의 꼭짓점에서 배를 타고 다른 섬의 어떤 꼭짓점으로 건너가 그 섬의 둘레를 전부 울타리로 두른 뒤, 갔던 경로를 그대로 되짚어 곧바로 원래 섬의 같은 꼭짓점으로 돌아온다. 즉 한 번의 배 왕복에는 편도 뱃삯의 두 배가 든다.

꼭짓점 쌍 사이를 배로 오가는 비용은 대칭인 비용 행렬로 주어진다.

섬은 NN개의 꼭짓점 쌍 (V1,V2)(V_1, V_2)로 주어지며, 이 변들을 어떻게 섬으로 조립할지는 스스로 알아내야 한다. 꼭짓점은 11부터 NN까지 번호가 매겨져 있고, 각 꼭짓점은 정확히 하나의 섬에 속한다.

모든 섬을 울타리로 둘러싸는 데 드는 최소 비용을 구하여라.

제약: 3≤N≤5003 \le N \le 500, 1≤V1,V2≤N1 \le V_1, V_2 \le N, 각 배 이동 비용은 00 이상 10001000 이하.

입력

  • 첫째 줄: 정수 NN.
  • 둘째 줄부터 N+1N+1째 줄까지: 각 줄에 섬 둘레의 한 변을 이루는 두 꼭짓점 V1V_1, V2V_2가 공백으로 구분되어 주어진다.
  • N+2N+2째 줄부터 2N+12N+1째 줄까지: 비용 행렬의 각 행. ii번째 줄에는 NN개의 정수가 있으며, 꼭짓점 ii에서 다른 각 꼭짓점으로 배를 타고 이동하는 비용을 뜻한다. 행렬은 대칭이다.

출력

  • 모든 섬에 울타리를 치는 최소 비용을 정수 하나로 출력한다.

힌트

아래 그림은 세 개의 섬을 나타낸다.

  1        10            4
    xxxxxxx              x
   xxxxxxxxx            xxxx
7 xxxxxxxxxxx 6        xxxxxxx
 xxxxxxxxxxx       11 xxxxxxxxxx 5
  xxxxxxx
   xxx
  3         12 xxxxxxx 2
              xxxxxxxx
              xxxxxxxx
             xxxxxxxxx
             xxxxxxxxx
            xxxxxxxxxx
            xxxxxxxxxx
          8 xxxxxxxxxx 9

세 섬은 각각 꼭짓점 {1,7,3,6,10}\{1,7,3,6,10\}, {4,5,11}\{4,5,11\}, {2,9,8,12}\{2,9,8,12\}로 이루어진다.

예를 들어 존이 꼭짓점 11에서 배를 타고 꼭짓점 1111로 건너가 둘째 섬을 두르고 다시 11로 돌아오면 8×2=168 \times 2 = 16이 들고, 11에서 1212로 건너가 셋째 섬을 두르고 돌아오면 7×2=147 \times 2 = 14가 든다. 첫째 섬은 시작 섬이라 배를 탈 필요가 없으므로, 총비용은 16+14=3016 + 14 = 30이다. 최적해는 여러 가지일 수 있다.

예제3

  1. 예제 1

    입력
    12
    1 7
    7 3
    3 6
    6 10
    10 1
    2 12
    2 9
    8 9
    8 12
    11 5
    5 4
    11 4
    0 15 9 20 25 8 10 13 17 8 8 7
    15 0 12 12 10 10 8 15 15 8 8 9
    9 12 0 25 20 18 16 14 13 7 12 12
    20 12 25 0 8 13 14 15 15 10 10 10
    25 10 20 8 0 16 20 18 17 18 9 11
    8 10 18 13 16 0 10 9 11 10 8 12
    10 8 16 14 20 10 0 18 20 6 16 15
    13 15 14 15 18 9 18 0 5 12 12 13
    17 15 13 15 17 11 20 5 0 22 8 10
    8 8 7 10 18 10 6 12 22 0 11 12
    8 8 12 10 9 8 16 12 8 11 0 9
    7 9 12 10 11 12 15 13 10 12 9 0
    
    예상 출력
    30
    
  2. 예제 2

    입력
    3
    1 2
    2 3
    3 1
    0 5 5
    5 0 5
    5 5 0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    6
    1 2
    2 3
    3 1
    4 5
    5 6
    6 4
    0 9 9 9 9 9
    9 0 9 9 7 6
    9 9 0 2 9 9
    9 9 2 0 9 9
    9 7 9 9 0 9
    9 6 9 9 9 0
    
    예상 출력
    4