가중치 복사 버그
시간 제한2초메모리 제한1024 MB
간선 가중치가 0 또는 1인 그래프에서 간선을 지날 때마다 이후 간선의 가중치가 그만큼 늘어날 때 s에서 e까지 최단 길이를 이진수로 구합니다.
문제
개의 정점과 개의 양방향 간선으로 이루어진 그래프가 있다. 정점에는 부터 까지 번호가 매겨져 있다. 각 간선에는 가중치가 있으며, 가중치는 또는 이다. 정점 에서 정점 까지 가는 가능한 모든 경로의 길이 중 최솟값을 구하여라.
위 문제는 전형적인 0-1 BFS 문제라서 너무 쉽다. 하지만 아래와 같이 그래프에 가중치 복사 버그가 일어난다면 어떨까?
- 가중치가 인 간선을 지나면, 그 직후 모든 간선의 가중치가 만큼 증가한다.
- 여기서 가중치는 간선의 초기 가중치가 아니라, 간선을 지나기 직전의 가중치이다.
입력
첫째 줄에 정점의 수 , 간선의 수 , 시작 정점의 번호 , 도착 정점의 번호 가 공백으로 구분되어 주어진다. (; ; ; )
이후 개의 줄에 각 간선의 정보가 주어진다. 각 줄에는 , , 가 공백으로 구분되어 주어진다. (; ; ) 이는 정점 와 를 잇고 초기 가중치가 인 간선이 있다는 뜻이다.
에서 로 가는 경로가 적어도 하나 있다.
출력
정점 에서 정점 로 가는 가능한 모든 경로의 길이 중 최솟값을 출력한다.
답은 이진수로 출력하며, 답이 인 경우에는 0을 출력한다. 그렇지 않은 경우에는 0으로 시작하면 안 된다.