아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

소 허들 넘기

시간 제한1초메모리 제한128 MB

요약
여러 질의마다 두 역 사이에서 가장 높은 허들의 높이가 최소가 되는 경로를 찾고, 갈 수 없으면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
그래프, 최단 경로, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

농부 존은 소들이 카운티 점프 대회를 준비하도록 하고 싶어 합니다. 그래서 베시와 친구들은 허들을 넘는 연습을 하고 있습니다. 하지만 점점 지쳐서, 허들을 넘을 때 가능한 한 적은 힘을 쓰고 싶어 합니다.

낮은 허들 여러 개를 넘는 것은 소에게 그리 어렵지 않지만, 아주 높은 허들 하나는 큰 부담이 됩니다. 그래서 소들은 자신이 넘어야 하는 허들 중 가장 높은 허들의 높이에만 신경을 씁니다.

연습장에는 NN개의 지점이 있으며 1…N1 \ldots N으로 번호가 매겨져 있습니다 (1≤N≤3001 \le N \le 300). MM개의 단방향 경로가 지점 쌍을 연결하고, 경로에도 1…M1 \ldots M으로 번호가 매겨져 있습니다 (1≤M≤25,0001 \le M \le 25{,}000). 경로 ii는 지점 SiS_i에서 지점 EiE_i로 향하며, 높이가 HiH_i인 허들이 정확히 하나 있습니다 (1≤Hi≤1,000,0001 \le H_i \le 1{,}000{,}000). 소는 자신이 지나가는 모든 경로의 허들을 반드시 넘어야 합니다.

소들에게는 완료해야 할 TT개의 작업이 있습니다 (1≤T≤40,0001 \le T \le 40{,}000). 작업 ii는 서로 다른 두 수 AiA_i와 BiB_i로 이루어지며 (1≤Ai≤N1 \le A_i \le N, 1≤Bi≤N1 \le B_i \le N), 소가 하나 이상의 경로를 지나 지점 AiA_i에서 지점 BiB_i까지 이동해야 함을 뜻합니다. 소는 AiA_i에서 BiB_i로 이동하면서 넘어야 하는 가장 높은 허들의 높이를 최소화하는 경로로 이동하고 싶어 합니다. 각 작업에 대해, 넘어야 하는 가장 높은 허들의 높이가 가장 작아지는 경로를 찾아 그 높이를 출력하는 프로그램을 작성하세요.

입력

  • 첫째 줄: 공백으로 구분된 세 정수 NN, MM, TT
  • 둘째 줄부터 M+1M+1번째 줄까지: i+1i+1번째 줄에는 공백으로 구분된 세 정수 SiS_i, EiE_i, HiH_i가 주어집니다.
  • M+2M+2번째 줄부터 M+T+1M+T+1번째 줄까지: i+M+1i+M+1번째 줄에는 작업 ii를 설명하는 두 정수 AiA_i와 BiB_i가 공백으로 구분되어 주어집니다.

출력

  • 첫째 줄부터 TT번째 줄까지: ii번째 줄에 작업 ii의 결과, 즉 두 지점 사이를 이동할 때 필요한 가장 높은 허들 높이의 최솟값을 출력합니다. 두 지점 사이를 이동하는 것이 불가능하면 −1-1을 출력합니다.

예제1

  1. 예제 1

    입력
    5 6 3
    1 2 12
    3 2 8
    1 3 5
    2 5 3
    3 4 4
    2 4 8
    3 4
    1 2
    5 1
    
    예상 출력
    4
    8
    -1