간선을 하나 그어서 루트까지 거리의 합을 최소로 만들기로 했습니다

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

요약
루트가 1인 가중치 트리에 가중치 0인 간선을 최대 한 번 추가해 모든 정점에서 루트까지 거리의 합을 최소로 만들고 그 최솟값을 출력한다.
난이도

보통10점 중 7점

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

문제

트리는 사이클이 없는 단순 연결 그래프이다.

정점이 NN개인 트리가 주어진다. 트리의 정점에는 11부터 NN까지의 번호가 매겨져 있다. 트리의 루트 정점은 항상 11이고 트리의 간선은 양수 가중치를 갖는다.

주어진 트리에 다음 연산을 최대 한 번 사용할 수 있다.

  • 임의의 정점 uu와 vv를 연결하는 가중치가 00인 간선을 추가한다.

d_id\_i를 ii부터 루트 정점까지의 최단 거리라고 정의하자. 연산을 한 번만 사용하여 ∑_i=1Nd_i\sum\_{i=1}^{N}d\_i를 최소화하는 프로그램을 작성하시오.

입력

첫 번째 줄에 정점의 개수 NN이 주어진다. (1≤N≤200,000)(1\leq N\leq 200\\, 000)

두 번째 줄부터 N−1N-1줄에 걸쳐 나무의 각 간선이 잇는 두 정점의 번호 uu, vv와 간선의 가중치 ww가 공백으로 구분되어 주어진다. (1≤u,v≤N;(1\leq u,v\leq N; 1≤w≤1,000,000)1\leq w\leq 1\\, 000\\, 000)

출력

가능한 ∑_i=1Nd_i\sum\_{i=1}^{N}d\_i의 최솟값을 출력한다.

예제2

  1. 예제 1

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

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