전선 연결하기

시간 제한1.5초메모리 제한1024 MB

요약
가중치 트리가 주어질 때 도로와 겹치지 않는 전선 N-1개로 모든 마을을 연결할 수 있는지 판별하고, 가능하면 전선 길이 합의 최솟값을 구한다.
난이도

어려움10점 중 8점

유형
트리, 최소 신장 트리, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

NN개의 마을과 두 마을을 양방향으로 잇는 N−1N-1개의 도로가 있다. 이 도로만을 이용해 임의의 두 마을 사이를 이동하는 것이 가능하다. 즉, 도로는 트리 형태를 이루고 있다.

두 마을을 잇는 전선 N−1N-1개를 설치해 NN개의 마을을 모두 이으려고 한다. 어떤 두 마을을 전선으로 이을 때 필요한 전선의 길이는 그 두 마을 사이의 거리와 같다. 이때 두 마을 사이의 거리는 두 마을을 잇는 단순 경로를 이루는 도로들의 길이의 합으로 정의된다. 단, 두 마을 사이를 잇는 도로가 있는 경우에는 그 두 마을 사이를 잇는 전선을 설치할 수 없다.

모든 마을을 전선으로 이어서 임의의 두 마을 사이를 전선만으로 오가는 것이 가능한지 판별하고 가능하다면 필요한 전선 길이의 합의 최솟값을 구해보자.

입력

첫째 줄에 마을의 개수를 나타내는 정수 NN이 주어진다. (2≤N≤200 000)(2 \leq N \leq 200\ 000)

다음 N−1N-1줄에 걸쳐 도로를 나타내는 세 정수 a_ia\_i, b_ib\_i, w_iw\_i가 공백으로 구분되어 주어진다. 이는 ii번째 도로가 a_ia\_i 마을과 b_ib\_i 마을을 잇고 있으며 길이가 w_iw\_i임을 나타낸다. (1≤a_i,b_i≤N;a_i≠b_i;1≤w_i≤109)(1 \leq a\_i, b\_i \leq N; a\_i\neq b\_i; 1\leq w\_i \leq 10^9)

출력

만약 마을 모두를 전선으로 잇는 것이 불가능하다면 -1을 출력한다. 그렇지 않다면 마을 모두를 잇기 위해 필요한 전선 길이의 합의 최솟값을 출력한다.

예제3

  1. 예제 1

    입력
    4
    1 2 1
    2 3 2
    3 4 3
    
    예상 출력
    14
    
  2. 예제 2

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

    입력
    10
    9 2 1
    10 1 2
    3 1 1
    10 6 3
    5 2 5
    7 9 7
    10 4 5
    9 8 2
    9 1 10
    
    예상 출력
    57