가중치가 있는 방향 그래프와 고객 정점들이 주어질 때, 각 고객을 최단 시간에 방문하도록 트럭 경로를 배정하는 최소 대수를 구한다.
보통7그래프최단 경로동적 계획법최소 신장 트리아직 제출이 없습니다시간 제한5초메모리 제한512 MB당신은 배송 회사를 운영한다. 고객에게 물건을 배달하려고 트럭을 투입해야 하는데, 물건과 트럭은 하루가 시작될 때 모두 창고에 있다.
도로망은 교차로를 잇는 일방통행 도로로 이루어진다. 창고와 고객은 모두 교차로에 있고, 각 도로를 지나는 주행 시간은 미리 알려져 있다.
이 회사는 초고속 배송을 보장한다. 트럭은 하루가 시작되자마자 출발하고, 고객 i는 시각 Ti에 물건을 받는다. 여기서 Ti는 창고에서 고객 i가 있는 교차로까지 트럭이 이동하는 데 걸리는 최소 시간이다.
이 보장을 지키려면 트럭을 최소 몇 대 투입해야 하는가? 다시 말해 트럭마다 주행 경로를 하나씩 정해서 모든 고객 i를 시각 Ti에 어떤 트럭이 방문하도록 만들 수 있는 최소 트럭 수를 구하라. 하루를 시작할 때 트럭에 물건을 싣는 시간과 고객에게 도착해 물건을 내려놓는 시간은 0으로 본다. 물건은 충분히 작아서 트럭 한 대가 필요한 만큼 많은 고객의 물건을 한꺼번에 실을 수 있다.
입력은 테스트 케이스 하나로 이루어진다.
첫째 줄에 세 정수 N, M, C가 주어진다. N은 도로망의 교차로 수 (2≤N≤103), M은 도로의 수 (1≤M≤105), C는 고객의 수 (1≤C≤300, C<N)이다.
교차로에는 0번부터 N−1번까지 번호가 붙어 있고, 창고는 항상 0번 교차로에 있다. 둘째 줄에 고객이 있는 교차로 번호를 뜻하는 서로 다른 정수 C개가 주어진다. 각 번호는 1 이상 N−1 이하이다.
이어지는 M개의 줄에 각각 정수 U, V, W가 주어진다 (0≤U,V≤N−1, U=V, 1≤W≤109). U에서 V로 가는 일방통행 도로가 있고 주행 시간이 W라는 뜻이다.
어떤 교차로 U에서 다른 교차로 V로 가는 도로는 많아야 하나다. 다만 U에서 V로 가는 도로와 V에서 U로 가는 도로가 둘 다 있을 수는 있다. 창고에서 모든 고객에게 갈 수 있음은 항상 보장된다.
모든 고객 i가 시각 Ti에 어떤 트럭의 방문을 받도록 하는 데 필요한 트럭의 최소 개수를 정수 하나로 출력한다.
첫 번째 예제에서는 한 트럭이 (0,1,2) 경로를, 다른 트럭이 (0,3) 경로를 달리면 된다. 두 번째 예제의 답은 (0,1), (0,2), (0,3) 세 경로를 쓰는 방법뿐이다. 세 번째 예제에서는 한 트럭이 (0,1), 다른 트럭이 (0,4,6), 마지막 트럭이 (0,2,3,5,7)을 달린다.