만드는 중입니다

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

무능한 배달 오크

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

요약
최단 경로 표지판을 가장 유리하게 놓았을 때, 무작위로 최대 d번 헤맬 수 있는 오크가 1번 탑에서 n번 탑까지 반드시 도착하는 최대 d를 구합니다.
난이도

보통10점 중 7점

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

문제

이센가드의 마법사 사루만은 몇 가지 마법의 도움을 받아 nn 개의 탑 사이에 수송 체계를 만들었다. 정확히 말하면, 두 탑을 잇는 단방향 통로 mm 개를 만들었다. 각 통로 ii에는 오크가 그 통로를 지나는 데 걸리는 시간(초)을 나타내는 수 t_it\_i가 붙어 있다. 즉, 사루만의 수송 체계는 방향 가중치 그래프로 표현할 수 있다.

12월 15일, 가운데 탑인 오르상크에 있던 사루만에게 팔란티르를 통해 사우론의 전갈이 도착한다. 귀한 선물이 이미 이센가드 입구 탑 근처까지 와 있다는 내용이다. 그래서 사루만은 수비대에게 오크 한 명을 골라 입구 탑에서 오르상크까지 가장 짧은 경로로 선물을 전달하라고 지시해야 한다.

그런데 오크들은 그다지 영리하지 않다. 수송 체계의 통로를 따라 짐을 끌고 갈 수는 있고, (원칙적으로는) 오르상크가 어디인지도 안다. 그러나 최단 경로라는 개념은 거의 이해하지 못한다. 모두의 수고를 덜기 위해 사루만은 일부 탑에 "TO ORTHANC - THIS WAY"라고 적힌 커다란 깜빡이 표지판을 달고, 그 탑에서 나가는 통로 중 하나를 가리키게 한다. 사루만은 오크들이 최대한 빨리 도착하기를 바라므로, 표지판은 오르상크까지의 최단 경로 중 하나에 놓인 통로만 가리킬 수 있다. 형식적으로 말하면, 탑 uu의 표지판이 통로 a⃗=uv→\vec{a} = \overrightarrow{uv}를 가리킬 수 있는 조건은 dist→(v,O)<+∞\mathop{\overrightarrow{\mathrm{dist}}}(v, O) < +\infty이고 dist→(u,O)=t_a⃗+dist→(v,O)\mathop{\overrightarrow{\mathrm{dist}}}(u, O) = t\_{\vec{a}} + \mathop{\overrightarrow{\mathrm{dist}}}(v, O)가 성립하는 것이다. 여기서 dist→(x,y)\mathop{\overrightarrow{\mathrm{dist}}}(x, y)는 탑 xx에서 탑 yy로 가는 데 걸리는 최소 시간이며(방향 경로가 없으면 +∞+\infty), OO는 오르상크 탑, uu와 vv는 통로 a⃗\vec a의 출발 탑과 도착 탑이다. 사루만은 오르상크에는 표지판을 달지 않고, 오르상크에 도달할 수 없는 탑에도 달지 않는다. 그 밖의 모든 탑에는 표지판을 정확히 하나씩 단다.

그래도 완벽하게 작동하지는 않는다. 오르상크로 이동하는 동안 오크가 (오르상크를 제외한) 어떤 탑 근처에 올 때마다, 오크는 표지판이 붙은 통로를 고르거나, 사루만이 부르는 이른바 "어슬렁거리기"를 할 수 있다. 어슬렁거리기는 오크가 나가는 통로를 완전히 무작위로 고르는 것이다. 어떤 오크든 오르상크로 가라는 명령을 받았을 때, 이동 중 어슬렁거리기를 dd번보다 많이 하지 않는 정수 dd가 존재한다. 이 값을 그 오크의 "무능도"라고 부르기로 하자.

또 어떤 순간에는 오크가 오르상크로 가는 방향 경로가 없는 탑 근처에 놓일 수도 있다. 이런 불운한 상황에서는 가장 무능한 오크라도 그 탑에서 표지판을 찾지 못하고, 임무가 실패했음을 알아차린 뒤 즉시 멈추어 구조 작업을 기다린다.

사루만은 부하들이 그리 뛰어난 머리를 가지지 못했다는 것을 알고 있으므로, 선물이 빨리 도착하기를 기대하지는 않는다. 다만 최소한 성공하기를 원한다. 따라서 이 임무에 가능한 한 유능한 오크를 배정하는 것이 합리적이다. 하지만 유능한 오크는 드물고, 현재 하고 있는 일에서 빼내면 그 일이 크게 흐트러질 수 있다. 그러므로 이센가드 수송 체계에 대한 설명이 주어졌을 때, 사루만이 표지판을 적절히 배치하여, 무능도가 dd인 오크를 입구 탑에서 선물 배달에 배정하면 반드시 오르상크에 도착하게 되는 최대의 dd를 구하라.

입력

첫째 줄에 탑의 개수 nn과 단방향 통로의 개수 mm이 주어진다(2≤n≤4⋅1052 \le n \le 4 \cdot 10^5; 0≤m≤4⋅1050 \le m \le 4 \cdot 10^5). 이어지는 mm개의 줄에 통로의 정보가 주어진다. 각 줄에는 세 정수 u_iu\_i, v_iv\_i, t_it\_i가 들어 있으며, 각각 통로의 출발 탑 번호, 도착 탑 번호, 짐을 든 오크가 그 통로를 지나는 데 걸리는 초 단위 시간이다(1≤u_i,v_i≤n1 \le u\_i, v\_i \le n; 1≤t_i≤1061 \le t\_i \le 10^6). 같은 두 탑을 잇는 통로가 여러 개 있을 수 있으며, 방향은 어느 쪽이든 가능하다. 자기 자신으로 돌아오는 통로도 있을 수 있다. 즉, 자기 루프, 다중 통로, 양방향 통로 쌍이 모두 허용된다.

입구 탑의 번호는 1이고, 오르상크의 번호는 nn이다.

출력

정수 dd 하나를 출력하라. 이는 배달을 반드시 완료할 수 있는 오크의 무능도 최댓값이다. 어떤 무능도에서든 가능하다면 탑의 개수 nn을 출력하라. 반대로 어떤 무능도에서도 불가능하다면 −1-1을 출력하라.

예제5

  1. 예제 1

    입력
    5 7
    1 3 5
    4 5 2
    3 4 3
    1 5 9
    4 2 8
    5 2 11
    3 5 5
    
    예상 출력
    2
    
  2. 예제 2

    입력
    6 6
    1 2 5
    2 3 9
    1 4 11
    2 1 1000000
    5 3 15
    5 6 1
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    4 7
    1 2 5
    1 1 30
    3 2 9
    1 4 11
    1 4 16
    2 1 1000000
    1 4 11
    
    예상 출력
    4
    
  4. 예제 4

    입력
    2 0
    
    예상 출력
    -1
    
  5. 예제 5

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