만드는 중입니다

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

활자 그래프

시간 제한1.5초메모리 제한1024 MB

요약
앞선 그래프를 시작점과 끝점을 정해 끼워 넣을 수 있을 때, T번째 그래프에서 정점 1에서 정점 2까지의 최단 거리를 구합니다.
난이도

어려움10점 중 8점

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

문제

고려 시대의 학자 하의비는 금속 활자로 그래프를 찍어 내는 작업을 하고 있었다. 그러던 중 하의비는 활자로 찍어 내던 활자 그래프에서 최단 경로가 궁금해졌다.

하의비는 현재 TT개의 활자 그래프를 가지고 있다. 만든 순서대로 1번부터 TT번까지 번호가 매겨져 있다.

tt번 활자 그래프는 NtN_t개의 번호가 붙은 정점으로 이루어져 있으며, 정점에는 1 이상 NtN_t 이하의 번호가 붙어 있다. 이후 다음 두 가지 작업 중 하나를 반복해서 tt번 활자 그래프를 완성한다.

  • 번호가 붙은 vv번 정점에서 ww번 정점으로 가는 가중치가 있는 단방향 간선을 추가한다.
  • ii번째 활자 그래프를 찍는다. 시작점과 끝점이 tt번 활자 그래프의 vv번 정점과 ww번 정점이 되도록 ii번째 활자 그래프의 정점과 간선을 추가한다. 이때 생기는 ii번째 활자 그래프의 정점에는 번호가 붙지 않는다. (1≤i<t1 \le i < t)

모든 활자 그래프의 시작점은 1번 정점이고, 끝점은 2번 정점이다.

이때 TT번 활자 그래프에서 1번 정점에서 2번 정점으로 가는 최단 경로를 구해 보자.

입력

첫 줄에 활자 그래프의 개수 TT가 주어진다. (1≤T≤100 0001 \le T \le 100\,000)

각 활자 그래프의 정보는 다음과 같이 주어진다.

tt번 활자 그래프의 정보를 입력받는다고 하자.

  • 첫 줄에는 tt번 활자 그래프의 번호가 붙은 정점의 개수 NtN_t와 간선이나 다른 활자 그래프를 찍은 횟수 MtM_t가 공백으로 구분되어 주어진다. (2≤Nt≤200 0002 \le N_t \le 200\,000, 0≤Mt≤500 0000 \le M_t \le 500\,000)
  • 이후 MtM_t개의 줄에 정수 vv, ww, xx가 공백으로 구분되어 주어진다. (1≤v,w≤Nt1 \le v, w \le N_t, v≠wv \ne w, −(t−1)≤x≤109-(t-1) \le x \le 10^9)
    • x≥0x \ge 0이면 vv번 정점에서 ww번 정점으로 가는 가중치 xx의 단방향 간선을 찍은 것이다.
    • x<0x < 0이면 시작점을 vv번 정점, 끝점을 ww번 정점에 맞춰 ∣x∣|x|번 활자 그래프를 찍은 것이다.

번호가 붙은 정점 개수의 합은 200 000200\,000을 넘지 않는다. 간선이나 다른 활자 그래프를 찍은 횟수의 합은 500 000500\,000을 넘지 않는다.

출력

TT번 활자 그래프에서 1번 정점에서 2번 정점으로 가는 최단 경로의 길이를 출력한다. 1번 정점에서 2번 정점으로 가는 경로가 없거나, 이 값이 101810^{18}보다 크면 -1을 출력한다.

예제1

  1. 예제 1

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