만드는 중입니다

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

가중치 복사 버그

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

요약
간선 가중치가 0 또는 1인 그래프에서 간선을 지날 때마다 이후 간선의 가중치가 그만큼 늘어날 때 s에서 e까지 최단 길이를 이진수로 구합니다.
난이도

어려움10점 중 8점

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

문제

NN개의 정점과 MM개의 양방향 간선으로 이루어진 그래프가 있다. 정점에는 11부터 NN까지 번호가 매겨져 있다. 각 간선에는 가중치가 있으며, 가중치는 00 또는 11이다. 정점 ss에서 정점 ee까지 가는 가능한 모든 경로의 길이 중 최솟값을 구하여라.

위 문제는 전형적인 0-1 BFS 문제라서 너무 쉽다. 하지만 아래와 같이 그래프에 가중치 복사 버그가 일어난다면 어떨까?

  • 가중치가 cc인 간선을 지나면, 그 직후 모든 간선의 가중치가 cc만큼 증가한다.
  • 여기서 가중치는 간선의 초기 가중치가 아니라, 간선을 지나기 직전의 가중치이다.

입력

첫째 줄에 정점의 수 NN, 간선의 수 MM, 시작 정점의 번호 ss, 도착 정점의 번호 ee가 공백으로 구분되어 주어진다. (2≤N≤300 0002\le N\le 300\,000; 1≤M≤600 0001\le M\le 600\,000; 1≤s,e≤N1\le s,e\le N; s≠es\ne e)

이후 MM개의 줄에 각 간선의 정보가 주어진다. 각 줄에는 uu, vv, cc가 공백으로 구분되어 주어진다. (1≤u,v≤N1\le u,v\le N; u≠vu\ne v; c∈{0,1}c\in\{0,1\}) 이는 정점 uu와 vv를 잇고 초기 가중치가 cc인 간선이 있다는 뜻이다.

ss에서 ee로 가는 경로가 적어도 하나 있다.

출력

정점 ss에서 정점 ee로 가는 가능한 모든 경로의 길이 중 최솟값을 출력한다.

답은 이진수로 출력하며, 답이 00인 경우에는 0을 출력한다. 그렇지 않은 경우에는 0으로 시작하면 안 된다.

예제2

  1. 예제 1

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

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