페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8160
서브태스크

통행료 1초 512MB

문제

한 트럭 운송 회사가 내부 프로세스를 최적화하려 한다. 이 최적화는 주로 비용 절감을 의미한다. 회사는 특정 지역을 대상으로 운영하며, 이 지역에서는 모든 도로를 지날 때 통행료를 지불해야 한다. 각 도로는 두 장소(도시, 마을 등)를 직접 연결한다. 회사는 여러 주문을 수행하는데, 각 주문은 한 장소에서 다른 장소로 물품을 운반하도록 지시한다. 회사를 위해 각 주문에 대해 최소 통행료를 계산하려 한다.

지역의 도로 네트워크는 그래프로 모델링할 수 있으며, 각 간선(edge)은 해당 도로의 통행료를 나타낸다. 따라서, 회사는 이 그래프에서 두 노드 간의 최소 비용 경로를 찾으려 한다.

그래프에는 특별한 성질이 있다:

  • 그래프는 방향성(directed)을 가지며,

  • 특정 상수 K에 대해 ⌊b/K⌋ = 1 + ⌊a/K⌋가 만족되는 경우에만 a에서 b로의 간선이 존재한다.

당신은 각 주문에 대해 최소 통행료를 계산하는 프로그램을 작성해야 한다.


입력

  • 첫 번째 줄에는 네 정수 K, N, M, O가 주어진다.

    • K: 도로 연결 조건에 사용되는 상수

    • N: 장소의 수 (노드의 수)

    • M: 도로의 수 (간선의 수)

    • O: 주문의 수

  • 다음 M개의 줄에는 세 정수 a, b, t가 주어진다.

    • a에서 b로 가는 도로가 있으며, 통행료는 t이다.

    • ⌊b/K⌋ = 1 + ⌊a/K⌋ 조건이 보장된다.

    • 한 쌍의 장소 a, b를 연결하는 도로는 최대 한 개다.

  • 마지막으로 O개의 줄에는 두 정수 a, b가 주어진다.

    • 이 주문은 장소 a에서 장소 b로 물품을 운반하는 것을 의미한다.

[제약 조건]

  • 1 ≤ N ≤ 50,000

  • 1 ≤ O ≤ 10,000

  • K ≤ 5

  • 0 ≤ a, b < N (모든 a, b는 주문과 도로 정보에 대해 a < b)

  • 1 ≤ t ≤ 10,000


출력

O개의 줄을 출력하며, 각 줄에는 한 정수를 출력한다:

  • i번째 줄에는 i번째 주문을 처리하기 위한 최소 통행료를 출력한다.

  • 경로가 존재하지 않는다면, -1을 출력한다.


부분문제

번호 점수 조건
#17점

k=1

#210점

a=0

#38점

O ≤ 100

#431점

O ≤ 3\ 000

#544점

추가 제약 조건 없음


예제1

입력
51455
059
51210
077
7128
4710
012
05
07
712
013
출력
15
9
7
8
-1

태그


출처

BOI 2017 C번

역링크