K번째로 짧은 경로 찾기

시간 제한2초메모리 제한256 MB

요약
가중치가 있는 방향 그래프에서 도시 1부터 각 도시까지의 k번째 최단 경로 길이를 구하고 존재하지 않으면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프, 힙
정답자
아직 제출이 없습니다

문제

여행자는 여러 도시를 지나 여행하려고 한다. 그는 항상 가장 짧은 경로만 고르는 대신, 너무 오래 걸리지 않으면서도 조금 다른 경로인 kk번째 최단경로를 알고 싶어 한다.

도시 11에서 출발할 때, 각 도시까지 가는 kk번째 최단경로의 소요 시간을 구하는 프로그램을 작성하라.

입력

첫째 줄에 도시의 수 nn, 도로의 수 mm, 구하려는 순서 kk가 주어진다. 조건은 1≤n≤10001 \le n \le 1000, 0≤m≤2500000 \le m \le 250000, 1≤k≤1001 \le k \le 100, mk≤3000000mk \le 3000000이다.

다음 mm개의 줄에는 도로 정보가 한 줄에 하나씩 주어진다. 각 줄은 세 정수 aa, bb, cc로 이루어지며, 이는 aa번 도시에서 bb번 도시로 가는 데 cc의 시간이 걸린다는 뜻이다. 조건은 1≤a,b≤n1 \le a, b \le n, 1≤c≤10001 \le c \le 1000이다.

도시 번호는 11번부터 nn번까지이다. 11번 도시는 시작 도시이며, 시작 도시와 도착 도시가 모두 같은 두 도로는 주어지지 않는다.

출력

nn개의 줄을 출력한다. ii번째 줄에는 11번 도시에서 ii번 도시로 가는 kk번째 최단경로의 소요 시간을 출력한다.

경로의 소요 시간은 경로에 포함된 도로들의 이동 시간을 모두 더한 값이다. ii번 도시에서 같은 ii번 도시로 가는 최단경로는 00이지만, 일반적인 kk번째 최단경로는 00이 아닐 수 있다. kk번째 최단경로가 존재하지 않으면 −1-1을 출력한다.

경로는 같은 정점을 여러 번 지나도 된다.

힌트

추가 힌트는 제공되지 않는다.

예제1

  1. 예제 1

    입력
    5 10 2
    1 2 2
    1 3 7
    1 4 5
    1 5 6
    2 4 2
    2 3 4
    3 4 6
    3 5 8
    5 2 4
    5 4 1
    
    예상 출력
    -1
    10
    7
    5
    14