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

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

여정

면접 대비

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

요약
가중치가 있는 트리에서 시작 도시 k와 방문할 도시 목록이 주어질 때, 모든 목표 도시를 적어도 한 번 방문하는 최단 경로의 길이를 구한다.
난이도

보통10점 중 6점

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

문제

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

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

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

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

입력

첫째 줄에 두 정수 nn과 kk가 공백 하나로 구분되어 주어진다(2≤n≤500002 \le n \le 50000, 1≤k≤n1 \le k \le n). nn은 도시의 수이고, kk는 바이트라이더가 출발하는 첫 번째 도시의 번호이다. 다음 n−1n-1개의 줄에는 각각 하나의 도로 정보가 주어진다. ii번째 도로 줄(1≤i≤n−11 \le i \le n-1)에는 세 정수 aia_i, bib_i, did_i가 공백으로 구분되어 주어진다(1≤ai,bi≤n1 \le a_i, b_i \le n, 1≤di≤10001 \le d_i \le 1000). aia_i와 bib_i는 도로가 잇는 두 도시이고, did_i는 도로의 길이이다. 그 다음 줄에는 바이트라이더가 방문하고 싶은 도시의 수 jj가 주어진다(1≤j≤n−11 \le j \le n-1). 마지막 줄에는 서로 다른 jj개의 정수 mim_i가 공백으로 구분되어 주어진다. 이는 바이트라이더가 방문하고 싶은 도시의 번호이다(1≤mi≤n1 \le m_i \le n, mi≠km_i \ne k).

출력

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

힌트

예제2

  1. 예제 1

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

    입력
    2 1
    1 2 5
    1
    2
    
    예상 출력
    5