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

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

봉사 캠프

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

요약
가중 트리에서 각 집을 출발점으로 삼아 표시된 K개 집을 모두 방문하고 복귀하지 않는 최단 운송 경로를 구합니다.
난이도

어려움10점 중 8점

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

문제

홍수 피해를 입은 마을에 봉사 캠프를 세운다. 마을에는 11번부터 NN번까지 번호가 붙은 집이 NN개 있고, 집과 집은 N−1N-1개의 도로로 이어져 있다. 그래서 어느 두 집 사이에도 이동 경로가 정확히 하나뿐이다. 각 도로에는 트럭이 그 도로를 지나는 데 걸리는 시간이 정해져 있다. 캠프는 어느 집의 마당에 세우는데, 관리자는 그 집을 아직 고르지 않았다.

미르코가 트럭 운전을 맡았다. 봉사팀을 캠프에서 각자 일할 집까지 태워다 주는 일이다. 트럭에는 모든 봉사팀이 한 번에 탈 수 있다. 봉사팀은 모두 KK개이고, 각 봉사팀이 가는 집은 서로 다르다.

미르코는 캠프에서 봉사팀 KK개를 한꺼번에 태우고 출발한 다음, 자기가 정한 순서대로 각 집에 봉사팀을 내려 준다. 마지막 봉사팀을 내려 준 뒤에는 캠프로 돌아가지 않고 그 집에 남아 일을 돕는다.

캠프 자리를 정하려면 각 집을 캠프로 삼았을 때의 소요 시간을 알아야 한다. 집마다, 그 집에 캠프를 세웠을 때 미르코가 봉사팀을 모두 데려다 주는 데 걸리는 최소 시간을 구하라.

입력

첫째 줄에 두 정수 NN과 KK가 주어진다. (1≤N≤5000001 \le N \le 500000, 1≤K≤N1 \le K \le N)

다음 N−1N-1개 줄에는 각각 세 정수 AA, BB, CC가 주어진다. AA번 집과 BB번 집을 잇는 양방향 도로를 트럭이 지나는 데 시간이 CC만큼 걸린다는 뜻이다. (1≤A,B≤N1 \le A, B \le N, 1≤C≤10000001 \le C \le 1000000)

다음 KK개 줄에는 각 봉사팀이 가는 집의 번호가 한 줄에 하나씩 주어진다. KK개 번호는 모두 다르다.

출력

NN개 줄을 출력한다. ii번째 줄에는 ii번 집에 캠프를 세웠을 때 미르코가 봉사팀을 모두 데려다 주는 데 걸리는 최소 시간을 출력한다.

힌트

첫 번째 예제를 보자. 11번 집에서 출발하면 22번, 44번, 22번, 55번 집 순서로 움직이면 된다. 22번 집에서 출발하면 55번, 22번, 44번 집 순서로 움직일 수 있다.

예제6

  1. 예제 1

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

    입력
    7 2
    1 2 4
    1 3 1
    2 5 1
    2 4 2
    4 7 3
    4 6 2
    3
    7
    
    예상 출력
    11
    15
    10
    13
    16
    15
    10
    
  3. 예제 3

    입력
    1 1
    1
    
    예상 출력
    0
    
  4. 예제 4

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

    입력
    6 2
    1 2 3
    2 3 4
    3 4 5
    4 5 6
    5 6 7
    1
    6
    
    예상 출력
    25
    28
    32
    37
    32
    25
    
  6. 예제 6

    입력
    5 4
    1 2 7
    1 3 5
    1 4 9
    1 5 2
    2
    3
    4
    5
    
    예상 출력
    37
    30
    32
    30
    35