만드는 중입니다

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

포탈 게임

면접 대비

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

요약
직선 위 0번 칸에서 N-1번 칸까지 가는 최소 시간을 구합니다. 빨간 포탈은 반드시 타야 하고 파란 포탈은 선택할 수 있으며, 도달할 수 없으면 -1을 출력합니다.
난이도

보통10점 중 4점

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

문제

포탈 게임은 직선 위에서 진행되는 게임이다. 직선에는 00부터 N−1N-1까지 번호가 붙은 NN개의 칸이 있다. 게임의 목표는 00번 칸에서 출발해 N−1N-1번 칸에 가능한 한 빠르게 도착하는 것이다.

이 게임에는 포탈이 총 CC개 있으며, 포탈은 레드 포탈과 블루 포탈 두 종류가 있다. 각 칸에는 포탈의 시작 지점이 최대 11개 있을 수 있다. 시작 지점이 aia_i번 칸인 포탈을 이용하면 끝 지점인 bib_i번 칸으로 이동한다. 포탈은 시작 지점에서 끝 지점으로만 이동할 수 있으므로, 같은 포탈을 이용해 bib_i번 칸에서 aia_i번 칸으로 이동할 수는 없다.

N−1N-1번 칸에 도착하기 전까지 각 칸의 종류에 따라 다음 행동을 할 수 있다.

  • 포탈의 시작 지점이 없는 칸: 현재 위치인 xx번 칸에서 x+1x + 1번 칸으로 1초 후 이동한다.
  • 레드 포탈의 시작 지점이 있는 칸: 시작 지점이 현재 위치 xx번 칸인 레드 포탈을 이용해 끝 지점으로 0초 후 이동한다.
  • 블루 포탈의 시작 지점이 있는 칸: 시작 지점이 현재 위치 xx번 칸인 블루 포탈을 이용해 끝 지점으로 0초 후 이동하거나, xx번 칸에서 x+1x + 1번 칸으로 1초 후 이동한다.

입력

첫 번째 줄에 칸의 개수 NN과 포탈의 개수 CC가 공백으로 구분되어 주어진다. (2≤N≤1052 \leq N \leq 10^5, 0≤C≤N0 \leq C \leq N)

두 번째 줄부터 CC개의 줄에 걸쳐 포탈 정보가 한 줄에 하나씩 주어진다. 각 줄에는 정수 tit_i, aia_i, bib_i가 공백으로 구분되어 주어진다. tit_i는 ii번째 포탈의 종류로, ti=0t_i = 0이면 레드 포탈, ti=1t_i = 1이면 블루 포탈이다. aia_i와 bib_i는 각각 ii번째 포탈의 시작 지점과 끝 지점이 위치한 칸의 번호이다. (ti∈{0,1}t_i \in \{0, 1\}, 0≤ai,bi≤N−10 \leq a_i, b_i \leq N-1, 0≤i≤C−10 \leq i \leq C-1)

모든 포탈의 시작 지점은 겹치지 않는다. 즉, 0≤i<j≤C−10 \leq i < j \leq C-1이면 ai≠aja_i \neq a_j이다.

출력

첫 번째 줄에 00번 칸에서 출발해 N−1N-1번 칸에 도착하는 데 걸리는 최소 시간을 출력한다.

어떤 방법으로 이동해도 N−1N-1번 칸에 도착할 수 없으면 −1-1을 출력한다.

예제3

  1. 예제 1

    입력
    10 2
    1 2 7
    0 6 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    14 3
    0 4 2
    1 5 6
    0 6 8
    
    예상 출력
    -1
    
  3. 예제 3

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