여정

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

바이트랜드에는 $1$번부터 $n$번까지 번호가 매겨진 $n$개의 도시가 있으며, 양방향 도로로 연결되어 있다. 도로는 $n-1$개뿐이지만, 어떤 도시에서든 다른 모든 도시로 이동할 수 있도록 연결되어 있다(즉, 도시와 도로는 트리를 이룬다).

여행자 바이트라이더가 $k$번 도시에 도착했다. 그는 $k$번 도시에서 출발하여 방문하고 싶은 도시 $m_1, m_2, \dots, m_j$를 (순서에 상관없이) 모두 지나는 여행을 계획하고 있다. 이 도시 번호들은 서로 모두 다르며, $k$와도 다르다. 바이트라이더는 가진 돈이 넉넉하지 않으므로, 계획한 모든 도시를 방문하되 이동 거리가 가장 짧은 경로($k$번 도시에서 시작)를 택하려 한다. 경로란 하나의 도로 또는 도로들의 연속으로, 다음 도로는 이전 도로가 끝난 도시에서 시작한다. 바이트라이더의 여행에 필요한 최단 경로의 길이를 구하여라.

다음을 수행하는 프로그램을 작성하라.

  • 표준 입력에서 다음을 읽는다:
    • 도시들을 잇는 도로의 정보
    • 바이트라이더가 도착한 도시의 번호
    • 방문하고 싶은 도시들의 목록
  • 바이트라이더의 여행에 필요한 최소 이동 거리를 계산한다.
  • 결과를 표준 출력에 쓴다.

입력

첫째 줄에 두 정수 $n$과 $k$가 공백 하나로 구분되어 주어진다($2 \le n \le 50000$, $1 \le k \le n$). $n$은 도시의 수이고, $k$는 바이트라이더가 출발하는 첫 번째 도시의 번호이다. 다음 $n-1$개의 줄에는 각각 하나의 도로 정보가 주어진다. $i$번째 도로 줄($1 \le i \le n-1$)에는 세 정수 $a_i$, $b_i$, $d_i$가 공백으로 구분되어 주어진다($1 \le a_i, b_i \le n$, $1 \le d_i \le 1000$). $a_i$와 $b_i$는 도로가 잇는 두 도시이고, $d_i$는 도로의 길이이다. 그 다음 줄에는 바이트라이더가 방문하고 싶은 도시의 수 $j$가 주어진다($1 \le j \le n-1$). 마지막 줄에는 서로 다른 $j$개의 정수 $m_i$가 공백으로 구분되어 주어진다. 이는 바이트라이더가 방문하고 싶은 도시의 번호이다($1 \le m_i \le n$, $m_i \ne k$).

출력

첫째 줄에 바이트라이더의 여행에 필요한 최단 경로의 길이를 나타내는 정수 하나를 출력한다.

힌트