만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

여행

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

요약
간선 길이가 1에서 3인 방향 그래프에서 간선과 도시를 다시 지나도 되는 경로 중 k번째로 짧은 길이를 구합니다. 경로가 k개보다 적으면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
행렬, 이분 탐색, 그래프
정답자
아직 제출이 없습니다

문제

Byteasar는 최근 자전거 여행의 즐거움에 빠졌다. 그는 휴가 kk일 동안 Byteotia의 시골길을 자전거로 달리려고 한다. 매일 서로 다른 경로로 여행하고 싶어 한다. 또한 여행의 난이도를 점차 높이고 싶어서, 각 여행은 바로 전날의 여행보다 짧지 않아야 한다. 구체적으로 ii일째에는 Byteotia의 마을들을 지나는 가능한 경로 중 ii번째로 짧은 경로를 따라간다. 휴가의 kk일째에 떠나는 마지막 여행의 길이를 구하라.

입력

첫 줄에 공백으로 구분된 세 정수 nn, mm, kk가 주어진다. 여기서 1≤n≤401 \le n \le 40, 1≤m≤10001 \le m \le 1000, 1≤k≤10181 \le k \le 10^{18}이다. 이어지는 mm개의 줄에는 도로가 한 줄에 하나씩 주어진다. 각 줄에는 공백으로 구분된 세 정수 uu, vv, cc가 있으며, 1≤u,v≤n1 \le u, v \le n, u≠vu \ne v, 1≤c≤31 \le c \le 3이다. 이는 마을 uu에서 마을 vv로 가는 길이 cc킬로미터의 일방통행 도로가 있다는 뜻이다. 같은 두 마을 사이에 도로가 여러 개 있을 수 있다. 경로는 어느 마을에서 시작해 어느 마을에서 끝나도 되며, 같은 마을이나 도로를 여러 번 지나도 된다.

배점의 75%에 해당하는 테스트에서는 n≤15n \le 15, m≤200m \le 200, k≤1012k \le 10^{12}이다. 배점의 50%에 해당하는 부분 문제에서는 모든 도로에 대해 c=1c = 1이다. 그중 배점의 25%에 해당하는 부분 문제에서는 추가로 k≤1 000 000k \le 1\,000\,000이다.

출력

한 줄에 kk번째로 짧은 경로의 길이를 출력한다. 서로 다른 경로가 kk개보다 적으면 −1-1을 출력한다.

힌트

길이가 1인 경로: 1 → 2, 5 → 3, 4 → 5.

길이가 2인 경로: 2 → 3, 3 → 4, 4 → 5 → 3.

길이가 3인 경로: 4 → 6, 1 → 2 → 3, 3 → 4 → 5, 5 → 3 → 4.

길이가 4인 경로 중 11번째로 짧은 것은 예를 들어 5 → 3 → 4 → 5이다.

예제1

  1. 예제 1

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