만드는 중입니다

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

최적 경로와 쿼리

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

요약
정류장을 잇는 버스 노선과 이동 시간이 주어질 때, 각 질의마다 버스 3대 이하로 s에서 e까지 가는 최소 시간을 구합니다.
난이도

보통10점 중 6점

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

문제

여러분은 NN개의 버스 정류장과 MM개의 셔틀버스가 있는 마을의 길찾기 서비스를 개발하려고 한다.

ii번째 셔틀버스는 uiu_i번 정류장과 viv_i번 정류장 사이를 오고 가는 버스다. 편도로 이동할 때마다 tit_i만큼의 시간이 걸리며, 두 정류장 외의 다른 정류장에서는 멈추지 않는다.

버스를 갈아타는 것은 매우 귀찮은 일이므로, 출발 지점과 도착 지점이 주어지면 최대 3개의 버스만 이용해 이동하는 가장 짧은 경로를 구해야 한다. 3개 이하의 버스로는 이동할 수 없는 경우도 있다. 이때는 사용자에게 자가용이나 택시 이용을 권하는 메시지를 출력한다.

서비스는 다음 요청을 처리한다.

  • ss ee: ss번 정류장에서 ee번 정류장으로 최대 3개의 버스만 이용해 이동할 때 필요한 소요 시간의 최솟값을 출력한다. 이동할 수 없다면 -1을 출력한다.

버스를 기다리거나 환승하는 시간은 생각하지 않는다. 버스의 이동 시간만 센다.

입력

첫째 줄에 버스 정류장의 개수 NN, 셔틀버스의 개수 MM, 처리해야 하는 요청의 개수 QQ가 공백으로 구분되어 주어진다. (2≤N≤50 0002 \leq N \leq 50\,000, 1≤M≤50 0001 \leq M \leq 50\,000, 1≤Q≤50 0001 \leq Q \leq 50\,000)

둘째 줄부터 MM개의 줄에 걸쳐 ii번째 줄에 ii번째 셔틀버스의 정보 uiu_i, viv_i, tit_i가 공백으로 구분되어 주어진다. (1≤ui,vi≤N1 \leq u_i, v_i \leq N, 1≤ti≤50 0001 \leq t_i \leq 50\,000, ui≠viu_i \neq v_i) 오고 가는 정류장이 같은 버스가 여러 대 주어지지 않는다.

다음 QQ개의 줄에 걸쳐 요청의 정보 ss, ee가 공백으로 구분되어 한 줄에 하나씩 주어진다. (1≤s,e≤N1 \leq s, e \leq N, s≠es \neq e)

출력

요청의 결과를 한 줄에 하나씩 차례대로 출력한다.

예제1

  1. 예제 1

    입력
    8 9 6
    1 2 1
    2 3 2
    3 4 3
    4 1 4
    4 5 5
    5 6 6
    6 7 7
    7 8 8
    8 5 9
    1 2
    1 3
    1 7
    1 8
    4 2
    4 7
    
    예상 출력
    1
    3
    -1
    18
    5
    18