여정
면접 대비시간 제한1초메모리 제한128 MB
가중치가 있는 트리에서 시작 도시 k와 방문할 도시 목록이 주어질 때, 모든 목표 도시를 적어도 한 번 방문하는 최단 경로의 길이를 구한다.
문제
바이트랜드에는 번부터 번까지 번호가 매겨진 개의 도시가 있으며, 양방향 도로로 연결되어 있다. 도로는 개뿐이지만, 어떤 도시에서든 다른 모든 도시로 이동할 수 있도록 연결되어 있다(즉, 도시와 도로는 트리를 이룬다).
여행자 바이트라이더가 번 도시에 도착했다. 그는 번 도시에서 출발하여 방문하고 싶은 도시 를 (순서에 상관없이) 모두 지나는 여행을 계획하고 있다. 이 도시 번호들은 서로 모두 다르며, 와도 다르다. 바이트라이더는 가진 돈이 넉넉하지 않으므로, 계획한 모든 도시를 방문하되 이동 거리가 가장 짧은 경로(번 도시에서 시작)를 택하려 한다. 경로란 하나의 도로 또는 도로들의 연속으로, 다음 도로는 이전 도로가 끝난 도시에서 시작한다. 바이트라이더의 여행에 필요한 최단 경로의 길이를 구하여라.
다음을 수행하는 프로그램을 작성하라.
- 표준 입력에서 다음을 읽는다:
- 도시들을 잇는 도로의 정보
- 바이트라이더가 도착한 도시의 번호
- 방문하고 싶은 도시들의 목록
- 바이트라이더의 여행에 필요한 최소 이동 거리를 계산한다.
- 결과를 표준 출력에 쓴다.
입력
첫째 줄에 두 정수 과 가 공백 하나로 구분되어 주어진다(, ). 은 도시의 수이고, 는 바이트라이더가 출발하는 첫 번째 도시의 번호이다. 다음 개의 줄에는 각각 하나의 도로 정보가 주어진다. 번째 도로 줄()에는 세 정수 , , 가 공백으로 구분되어 주어진다(, ). 와 는 도로가 잇는 두 도시이고, 는 도로의 길이이다. 그 다음 줄에는 바이트라이더가 방문하고 싶은 도시의 수 가 주어진다(). 마지막 줄에는 서로 다른 개의 정수 가 공백으로 구분되어 주어진다. 이는 바이트라이더가 방문하고 싶은 도시의 번호이다(, ).
출력
첫째 줄에 바이트라이더의 여행에 필요한 최단 경로의 길이를 나타내는 정수 하나를 출력한다.
힌트
