아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이진 도로

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

요약
이동할 때마다 값이 뒤집히는 상황에서 간선의 값과 현재 값이 같을 때만 지날 수 있다. 0번에서 N-1번까지 가는 최단 시간을 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

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

문제

알리는 여행 중이고, 목적지 한 곳에 되도록 빨리 닿으려고 한다.

여행지는 장소 NN개와 도로 EE개로 이루어진 그래프다. 장소에는 00번부터 N−1N-1번까지 번호가 붙어 있고, 모든 도로는 양방향이다. 도로 하나를 지나는 데 1시간이 걸리며 같은 장소와 같은 도로를 몇 번이든 다시 지날 수 있다.

알리는 00번 장소에서 출발해 N−1N-1번 장소로 가려고 한다.

모든 도로에는 00 또는 11의 값이 붙어 있고, 알리도 00 또는 11의 값을 지닌다. 알리는 자신의 값과 같은 값이 붙은 도로만 지날 수 있다. 도로 하나를 지나고 나면 알리의 값은 곧바로 뒤집힌다. 00이었으면 11이 되고, 11이었으면 00이 된다. 다음 도로를 지난 뒤에도 또 뒤집힌다.

출발할 때의 값은 알리가 직접 고른다. 00으로 시작해도 되고 11로 시작해도 된다. 알리가 N−1N-1번 장소에 닿는 데 걸리는 가장 짧은 시간을 시간 단위로 구하라.

입력

첫째 줄에 정수 NN과 EE가 주어진다. (1≤N≤200 0001 \le N \le 200\,000, 0≤E≤1 000 0000 \le E \le 1\,000\,000)

다음 EE개 줄에는 정수 AA, BB, VV가 주어진다. AA번 장소와 BB번 장소를 잇는 값 VV의 양방향 도로가 있다는 뜻이다. 같은 두 장소를 잇는 도로 가운데 값이 같은 것이 둘 이상 주어지는 일은 없다.

모든 도로에 대해 A≠BA \ne B, 0≤A,B<N0 \le A, B < N이고 VV는 00 또는 11이다.

출력

알리가 N−1N-1번 장소에 닿는 데 걸리는 가장 짧은 시간을 정수 하나로 출력한다. 닿을 수 없으면 -1을 출력한다.

참고

알리는 같은 장소와 같은 도로를 다시 지날 수 있으므로, 값만 바꾸려고 일부러 돌아가도 된다. 목적지로 바로 이어지는 도로가 있어도 그 순간 알리의 값이 도로의 값과 다르면 그 도로는 쓸 수 없다.

예제5

  1. 예제 1

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

    입력
    5 5
    0 1 1
    1 2 0
    3 1 0
    3 2 1
    1 4 1
    
    예상 출력
    5
    
  3. 예제 3

    입력
    3 2
    0 1 1
    0 1 0
    
    예상 출력
    -1
    
  4. 예제 4

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

    입력
    2 1
    0 1 0
    
    예상 출력
    1