만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

여행하는 애벌레

면접 대비

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

요약
루트 0에서 출발해 가중치가 있는 트리의 표시된 노드를 모두 방문하고 돌아오는 최단 경로의 길이를 구합니다.
난이도

쉬움10점 중 3점

유형
트리, DFS
정답자
아직 제출이 없습니다

문제

릴리스는 배고픈 애벌레이다. 나무의 뿌리에서 주변을 둘러보니 뿌리로 돌아가기 전에 먹고 싶은 나뭇잎이 몇 개 보인다. 릴리스는 가능한 한 빨리 이 나뭇잎을 모두 먹고, 통통하고 버터처럼 부드러운 나비로 자라고 싶어 한다.

릴리스가 사는 나무는 조금 특이하다. 나무는 노드들의 모음으로 볼 수 있고, 그중 일부 노드에는 릴리스가 먹고 싶은 나뭇잎이 있다. 각 가지는 정확히 두 노드를 잇는다. 어떤 두 노드 사이든 이동하는 길은 정확히 하나만 있다고 보장된다.

그림 1: 나무 안에서 릴리스가 움직이는 경로이다.

입력

첫 줄에는 나무의 노드 개수 NN (1≤N≤10001 \le N \le 1000)과 릴리스가 먹고 싶은 나뭇잎의 개수 KK (1≤K≤N1 \le K \le N)가 주어진다.

다음 N−1N-1개의 줄은 가지를 설명한다. ii번째 줄에는 정수 sis_i, tit_i (0≤si,ti<N0 \le s_i, t_i < N, si≠tis_i \ne t_i)와 did_i (0≤di≤1060 \le d_i \le 10^6)가 주어진다. 이는 노드 sis_i와 tit_i 사이에 가지가 있고, 그 가지를 건너는 데 did_i의 시간이 걸린다는 뜻이다. 노드 00을 뿌리로 하여 나무를 보면 sis_i는 tit_i의 부모이다. 즉 sis_i는 00에서 tit_i로 가는 유일한 경로 위에 있다. 릴리스는 항상 뿌리 노드 00에서 출발한다.

마지막 줄에는 서로 다른 정수 a1,…,aKa_1, \dots, a_K (0≤ai<N0 \le a_i < N)가 주어진다. 이는 릴리스가 먹고 싶은 나뭇잎이 있는 노드들이다.

출력

뿌리에서 출발해 가지를 따라 이동하고 다시 뿌리로 돌아오며, 릴리스가 모든 나뭇잎을 먹을 수 있는 가장 짧은 경로의 길이를 출력한다.

예제3

  1. 예제 1

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

    입력
    6 3
    0 1 5
    1 2 5
    2 3 42
    2 4 347
    2 5 612
    3 4 5
    
    예상 출력
    2022
    
  3. 예제 3

    입력
    3 2
    0 1 0
    0 2 21
    1 2
    
    예상 출력
    42