시간 제한
메모리 제한
시간 제한
2초
메모리 제한
256 MB
여행자는 여러 도시를 지나 여행하려고 한다. 그는 항상 가장 짧은 경로만 고르는 대신, 너무 오래 걸리지 않으면서도 조금 다른 경로인 k번째 최단경로를 알고 싶어 한다.
도시 1에서 출발할 때, 각 도시까지 가는 k번째 최단경로의 소요 시간을 구하는 프로그램을 작성하라.
첫째 줄에 도시의 수 n, 도로의 수 m, 구하려는 순서 k가 주어진다. 조건은 1≤n≤1000, 0≤m≤250000, 1≤k≤100, mk≤3000000이다.
다음 m개의 줄에는 도로 정보가 한 줄에 하나씩 주어진다. 각 줄은 세 정수 a, b, c로 이루어지며, 이는 a번 도시에서 b번 도시로 가는 데 c의 시간이 걸린다는 뜻이다. 조건은 1≤a,b≤n, 1≤c≤1000이다.
도시 번호는 1번부터 n번까지이다. 1번 도시는 시작 도시이며, 시작 도시와 도착 도시가 모두 같은 두 도로는 주어지지 않는다.
n개의 줄을 출력한다. i번째 줄에는 1번 도시에서 i번 도시로 가는 k번째 최단경로의 소요 시간을 출력한다.
경로의 소요 시간은 경로에 포함된 도로들의 이동 시간을 모두 더한 값이다. i번 도시에서 같은 i번 도시로 가는 최단경로는 0이지만, 일반적인 k번째 최단경로는 0이 아닐 수 있다. k번째 최단경로가 존재하지 않으면 −1을 출력한다.
경로는 같은 정점을 여러 번 지나도 된다.
추가 힌트는 제공되지 않는다.