적대자가 도로 하나를 공사 중으로 숨기고, 여행자는 도로의 끝 도시에 도착해야 그 사실을 알 수 있으며, S에서 T까지 최악의 경우 거리를 최소화해야 한다.
어려움9그래프최단 경로그리디DFS아직 제출이 없습니다시간 제한10초메모리 제한512 MBJAG 왕국에는 N개의 도시와 M개의 양방향 도로가 있다. i번째 도로 (ui,vi,ci)는 도시 ui와 도시 vi를 잇고 길이는 ci이다. JAG 왕국의 시민인 당신은 어느 날 도시 S에서 출발해 도시 T로 가기로 했다. 그런데 왕국의 도로 가운데 하나가 지금 공사 중이라 지나갈 수 없다는 사실을 알고 있다. 어느 도로인지는 모른다. 어떤 도로가 공사 중인지는 그 도로가 잇는 두 도시 중 한 곳에 있을 때에만 알 수 있다.
최악의 경우에 이동하는 경로의 총 길이가 최소가 되도록 하라. 출발하기 전에 경로를 정해 둘 필요는 없고, 다음에 갈 곳은 언제든지 그때그때 정할 수 있다. 최악의 경우에 도시 T에 도착할 수 없으면 -1을 출력한다.
입력은 다음 형식의 테스트 케이스 하나로 이루어진다.
N M S T
u1 v1 c1
.
.
.
uM vM cM
첫째 줄에 네 정수 N, M, S, T가 주어진다. N은 도시의 수 (2≤N≤100,000), M은 양방향 도로의 수 (1≤M≤200,000), S는 출발 도시 (1≤S≤N), T는 도착 도시 (1≤T≤N, S=T)이다. 이어지는 M개 줄은 도로 정보이다. 그중 i번째 줄에는 세 정수 ui, vi, ci가 주어지며, i번째 도로가 도시 ui와 도시 vi를 (1≤ui,vi≤N, ui=vi) 길이 ci (1≤ci≤109)로 잇는다는 뜻이다. 공사 중인 도로가 없다면 모든 도시 쌍은 서로 연결되어 있다고 가정해도 된다. 즉, 모든 도시 x와 y에 대해 주어진 도로만으로 x에서 y로 가는 경로가 적어도 하나 있다. 같은 두 도시를 잇는 도로가 두 개 이상 주어지지는 않는다. 즉, 1≤i<j≤M인 모든 i, j에 대해 {ui,vi}={uj,vj}이다.
최악의 경우에 이동하는 경로의 총 길이의 최솟값을 출력한다. 최악의 경우에 도시 T에 도착할 수 없으면 -1을 출력한다.