섬 (Islands)

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

요약
각 섬마다 간선이 하나씩 있는 무방향 가중 그래프에서 페리 도달 규칙을 지키며 걸을 수 있는 최대 총 거리를 구한다.
난이도

어려움10점 중 8점

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

문제

NN개의 섬이 있는 공원을 방문한다. 섬에는 11번부터 NN번까지 번호가 매겨져 있다. 각 섬 ii에서는 정확히 하나의 다리가 놓여 있으며, 이 다리는 섬 ii를 다른 어떤 섬과 잇고 그 길이는 LiL_i이다. 따라서 다리는 모두 합쳐 NN개이다. 각 다리는 한 섬에서 시작해 놓였지만, 지금은 모든 다리를 양방향으로 건널 수 있다. 또한 모든 섬 쌍 사이에는 두 섬을 오가는 여객선이 하나씩 있다.

여객선을 타는 것보다 걷는 것을 좋아하므로, 아래 규칙을 지키면서 건너는 다리 길이의 합을 최대로 만들고 싶다.

  • 원하는 섬에서 출발할 수 있다.
  • 같은 섬을 두 번 방문할 수 없다.
  • 현재 있는 섬 SS에서 아직 방문하지 않은 섬 DD로, 다음 두 가지 방법 중 하나로 이동할 수 있다.
    • 걷기: SS와 DD를 직접 잇는 다리가 있을 때만 가능하다. 그 다리의 길이가 총 걸은 거리에 더해진다.
    • 여객선: 이미 사용한 다리와 여객선을 어떤 방식으로 조합하더라도 SS에서 DD에 도달할 수 없을 때만 가능하다. (도달 가능 여부를 판단할 때는, 이미 방문한 섬을 지나는 경로를 포함해 모든 경로를 고려한다.)

모든 섬을 방문할 필요는 없으며, 모든 다리를 건너는 것이 불가능할 수도 있다.

NN개의 다리와 각 길이가 주어졌을 때, 위 규칙을 지키며 걸을 수 있는 최대 거리를 구하는 프로그램을 작성하라.

입력

  • 첫째 줄에 섬의 개수 NN이 주어진다 (2≤N≤1,000,0002 \le N \le 1{,}000{,}000). 섬은 11번부터 NN번까지 번호가 매겨져 있다.
  • 다음 NN개의 줄에는 각각 하나의 다리가 설명된다. ii번째 줄(i=1,2,…,Ni = 1, 2, \dots, N)에는 두 정수가 공백으로 구분되어 주어지며, 첫 번째 정수는 섬 ii에서 놓인 다리의 반대쪽 끝에 있는 섬의 번호, 두 번째 정수는 그 다리의 길이 LiL_i이다 (1≤Li≤100,000,0001 \le L_i \le 100{,}000{,}000). 모든 다리의 두 끝점은 항상 서로 다른 섬이다.

출력

걸을 수 있는 최대 거리를 한 정수로 한 줄에 출력한다.

참고: 일부 입력에서는 답이 32비트 정수 범위를 넘을 수 있으므로 64비트 정수 자료형을 사용해야 한다 (예: C/C++의 long long, Python은 기본 정수로 충분하다).

참고

예시에서 N=7N = 7개의 다리는 (1-3)(1\text{-}3), (2-7)(2\text{-}7), (3-4)(3\text{-}4), (4-1)(4\text{-}1), (5-1)(5\text{-}1), (6-3)(6\text{-}3), (7-2)(7\text{-}2)이다. 섬 22와 섬 77을 잇는 서로 다른 다리가 두 개 있음에 유의한다.

최대 걷기 거리를 얻는 한 가지 방법은 다음과 같다.

  • 섬 55에서 출발한다.
  • 길이 99인 다리를 걸어 섬 11에 도착한다.
  • 길이 88인 다리를 걸어 섬 33에 도착한다.
  • 길이 44인 다리를 걸어 섬 66에 도착한다.
  • 섬 66에서 섬 77로 여객선을 탄다.
  • 길이 33인 다리를 걸어 섬 22에 도착한다.

마지막에는 섬 22에 있고, 걸은 거리의 합은 9+8+4+3=249 + 8 + 4 + 3 = 24이다. 방문하지 못한 섬은 섬 44뿐이며, 더 이상 그곳에 갈 수 없다. 걸어서 갈 수 없는 이유는 섬 22와 섬 44를 잇는 다리가 없기 때문이고, 여객선으로 갈 수 없는 이유는 섬 22에서 다리 (2-7)(2\text{-}7), 이미 사용한 섬 77→섬 66 여객선, 그리고 다리 (6-3)(6\text{-}3)와 (3-4)(3\text{-}4)를 거쳐 섬 44에 도달할 수 있기 때문이다.

예제1

  1. 예제 1

    입력
    7
    3 8
    7 2
    4 2
    1 4
    1 9
    3 4
    2 3
    
    예상 출력
    24