쇼핑

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

요약
가중치가 있는 도로와 최대 10개의 상점이 주어질 때, 집 0에서 출발해 모든 상점을 방문하고 돌아오는 최단 경로를 구한다.
난이도

보통10점 중 7점

유형
그래프, 최단 경로, 동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

새 아파트로 막 이사를 와서 사야 할 물건이 잔뜩 있다. 그런데 이 많은 물건을 사려면 여러 상점을 돌아다녀야 한다. 필요한 물건을 모두 사는 데 드는 운전 거리를 최소로 하고 싶다.

도시는 여러 교차로가 도로로 연결된 형태로 이루어져 있다. 집과 모든 상점은 각각 어떤 교차로에 위치한다. 집에서 출발하여 방문해야 하는 모든 상점을 들른 뒤 다시 집으로 돌아오는 가장 짧은 경로의 길이를 구하여라.

입력

첫째 줄에 테스트 케이스의 개수를 나타내는 정수 하나가 주어진다. 각 테스트 케이스의 첫째 줄에는 도시의 교차로 수 NN 과 도로 수 MM 이 주어진다 (1≤N≤1000001 \le N \le 100000, 1≤M≤1000001 \le M \le 100000). 교차로는 00 번부터 N−1N-1 번까지 번호가 매겨져 있으며, 집은 00 번 교차로에 있다. 이어지는 MM 개의 줄에는 각각 세 정수 XX, YY, DD 가 주어지며, 이는 교차로 XX 와 YY 가 길이 DD 인 양방향 도로로 연결되어 있음을 뜻한다. 그다음 줄에는 방문해야 하는 상점의 수 SS 가 주어진다 (1≤S≤101 \le S \le 10). 이어지는 SS 개의 줄에는 각 상점이 위치한 교차로의 번호가 한 줄에 하나씩 주어진다. 모든 상점은 집에서 도달할 수 있다.

출력

각 테스트 케이스마다, 집에서 출발하여 모든 상점을 방문하고 다시 집으로 돌아오는 가장 짧은 쇼핑 경로의 길이를 정수 하나로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    1
    4 6
    0 1 1
    1 2 1
    2 3 1
    3 0 1
    0 2 5
    1 3 5
    3
    1
    2
    3
    
    예상 출력
    4