DAG LCA

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

요약
DAG가 주어지고, 각 질의 (u, v)마다 u와 v 모두로 가는 경로가 있는 정점 w 중 두 최단 경로 길이의 최댓값을 최소화하는 값을 구하고, 그런 정점이 없으면 -1을 출력한다.
난이도

어려움10점 중 8점

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

문제

무가중치 방향 비순환 그래프 GG가 주어진다. 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • uu vv: 두 정점 uu와 vv로 가는 경로가 모두 존재하는 모든 정점에 대해 uu와 vv로 가는 두 최단 경로의 길이 중 작지 않은 값의 최솟값을 출력한다. 두 정점 uu와 vv로 가는 경로가 존재하는 정점이 없다면 대신 -1을 출력한다.

입력

첫 번째 줄에 그래프 GG의 정점의 개수 nn, 간선의 개수 mm, 질의의 개수 qq가 공백으로 구분되어 주어진다. (5≤n≤2,000;0≤m≤4,000;1≤q≤1,0005 \leq n \leq 2\\,000; 0 \leq m \leq 4\\,000; 1 \leq q \leq 1\\,000)

두 번째 줄부터 mm개의 줄에 걸쳐 간선으로 연결된 두 정점의 번호 uu, vv가 한 줄에 하나씩 주어진다. 이는 uu에서 vv로 향하는 방향의 간선을 의미한다. (1≤u,v≤n;u≠v1 \leq u, v \leq n; u \neq v)

m+2m+2번째 줄부터 qq개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.

입력으로 주어지는 값은 모두 정수이며 무가중치 방향 비순환 그래프인 경우만 주어진다.

출력

쿼리가 주어질 때마다 쿼리의 답을 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    5 5 2
    1 2
    2 5
    1 3
    3 4
    4 5
    1 5
    2 3
    
    예상 출력
    2
    1
    
  2. 예제 2

    입력
    5 4 1
    1 3
    2 3
    3 4
    4 5
    1 2
    
    예상 출력
    -1