연결
시간 제한3초메모리 제한128 MB
가중치가 있는 방향 그래프에서 c에서 d로 가는 k번째로 짧은 경로의 길이를 묻는 질의에 답한다. 길이가 같은 경로도 따로 센다.
문제
바이트오시아(Byteotia) 기반시설부는 도시들 사이를 잇는 경로의 길이를 빠르게 알려 주는 프로그램을 만들려고 한다. 보통은 가장 짧은 경로를 찾지만, 여기서는 번째로 짧은 경로를 찾는다. 경로에는 순환이 있을 수 있으므로 같은 도시를 여러 번 지날 수도 있다.
예를 들어 두 도시를 잇는 경로가 네 개 있고 그 길이가 각각 , , , 라면, 가장 짧은 경로의 길이는 , 두 번째로 짧은 경로의 길이는 , 세 번째는 , 네 번째는 이다. 길이가 같은 경로도 각각 따로 센다.
경로는 항상 도로를 하나 이상 지나므로, 출발 도시와 도착 도시가 같은 경로는 반드시 순환을 이루어야 한다.
다음을 수행하는 프로그램을 작성하라.
- 표준 입력에서 바이트오시아의 도로망과 경로 길이에 대한 질의들을 읽는다.
- 각 질의의 답을 계산하여 표준 출력에 쓴다.
입력
첫째 줄에 공백으로 구분된 두 정수 과 이 주어진다. 이고 이다. 각각 도시의 수와 도로의 수이다. 도시는 번부터 번까지 번호가 매겨져 있다.
이어지는 개의 줄에는 공백으로 구분된 세 정수 , , 이 주어진다. 이고 이다. 각 줄은 도시 에서 도시 로 가는 길이 짜리 일방통행 도로 하나를 나타낸다. 임의의 순서쌍인 두 도시 사이에 그 방향으로 가는 도로는 최대 하나만 있다.
그다음 줄에는 질의의 수를 나타내는 정수 가 주어지며 이다. 이어지는 개의 줄에는 각각 공백으로 구분된 세 정수 , , 가 주어지며 이다. 각 질의는 도시 에서 도시 로 가는 번째로 짧은 경로의 길이를 묻는다.
출력
질의가 주어진 순서대로 각 질의의 답을 한 줄에 하나씩 출력한다. 번째 질의에 대해서는 구하는 경로의 길이를 정수 하나로 출력하고, 그러한 경로가 개보다 적으면 을 출력한다.