문제
한 트럭 운송 회사가 내부 프로세스를 최적화하려 한다. 이 최적화는 주로 비용 절감을 의미한다. 회사는 특정 지역을 대상으로 운영하며, 이 지역에서는 모든 도로를 지날 때 통행료를 지불해야 한다. 각 도로는 두 장소(도시, 마을 등)를 직접 연결한다. 회사는 여러 주문을 수행하는데, 각 주문은 한 장소에서 다른 장소로 물품을 운반하도록 지시한다. 회사를 위해 각 주문에 대해 최소 통행료를 계산하려 한다.
지역의 도로 네트워크는 그래프로 모델링할 수 있으며, 각 간선(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을 출력한다.
부분문제
번호 | 점수 | 조건 |
---|---|---|
#1 | 7점 | |
#2 | 10점 | |
#3 | 8점 | |
#4 | 31점 | |
#5 | 44점 | 추가 제약 조건 없음 |
예제1
514 5 5
0 5 9
5 12 10
0 7 7
7 12 8
4 7 10
0 12
0 5
0 7
7 12
0 13
15
9
7
8
-1