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

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

커플 만나기

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

요약
각 도시가 나가는 방향 간선을 하나씩 가진 함수 그래프에서, 두 출발 도시가 함께 도달할 수 있는 도시까지의 최소 이동 횟수 합을 각 질의마다 구하고 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 트리, 이분 탐색, 누적 합
정답자
아직 제출이 없습니다

문제

Nlogonia의 항공 규정에 따르면 모든 도시는 다른 한 도시로 향하는 출발 항공편을 정확히 하나 등록해야 한다. 항공편은 등록된 방향으로만 이용할 수 있다. 즉, 도시 XX에서 도시 YY로 가는 항공편이 등록되어 있어도 YY에서 XX로 가는 항공편이 있다는 뜻은 아니다. 모든 도시가 출발 항공편을 정확히 하나 등록하므로, 등록된 항공편의 총 수는 도시의 수와 같다.

커플 매칭 협회는 두 사람이 만나기 위해 타야 하는 항공편 수의 최솟값을 계산해 주는 서비스를 운영한다. 두 사람은 둘 다 살지 않는 도시에서 만나도 된다. 두 사람이 각각 도시 AA와 도시 BB에서 출발한다고 할 때, 서비스는 AA와 BB 양쪽에서 항공편으로 도달할 수 있는 도시 CC 중에서 AA에서 CC까지 필요한 항공편 수와 BB에서 CC까지 필요한 항공편 수의 합이 최소가 되는 CC를 찾는다. 도시 CC는 AA, BB 또는 둘 다와 같을 수도 있다.

등록된 모든 항공편의 목록과 여러 개의 질의가 주어진다. 각 질의는 한 커플이 사는 두 도시를 나타낸다. 각 질의에 대해 두 사람이 만나기 위해 필요한 항공편 수의 최솟값을 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어지며 파일의 끝에서 종료된다.

각 테스트 케이스는 여러 줄로 주어진다.

  • 첫째 줄에는 도시의 수를 나타내는 정수 NN이 주어진다 (2≤N≤1052 \le N \le 10^5). 도시는 11부터 NN까지 번호가 매겨져 있다.
  • 둘째 줄에는 NN개의 정수 F1,F2,…,FNF_1, F_2, \ldots, F_N이 주어진다. FiF_i는 도시 ii에서 등록된 유일한 출발 항공편이 향하는 도시를 뜻한다 (1≤Fi≤N1 \le F_i \le N, Fi≠iF_i \ne i).
  • 셋째 줄에는 질의의 수를 나타내는 정수 QQ가 주어진다 (1≤Q≤1051 \le Q \le 10^5).
  • 이어지는 QQ개의 줄에는 각각 한 커플이 사는 두 도시를 나타내는 정수 AA와 BB가 주어진다 (1≤A,B≤N1 \le A, B \le N).

한 테스트 케이스 안에서, 어떤 도시 XX에서 어떤 도시 YY로 항공편으로 이동할 수 있다면 그때 필요한 항공편 수는 최대 10410^4이다.

출력

각 질의마다 한 줄씩 출력한다. 커플이 항공편으로 만날 수 있다면 만나기 위해 타야 하는 항공편 수의 최솟값을 출력하고, 결코 만날 수 없다면 −1-1을 출력한다. 모든 테스트 케이스의 답을 순서대로 출력한다.

예제4

  1. 예제 1

    입력
    3
    2 1 2
    3
    1 2
    1 3
    1 1
    7
    2 1 4 5 3 5 6
    5
    1 3
    4 7
    7 4
    6 2
    2 1
    
    예상 출력
    1
    2
    0
    -1
    3
    3
    -1
    1
    
  2. 예제 2

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

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

    입력
    7
    2 3 4 5 3 2 6
    4
    1 6
    7 1
    7 4
    6 6
    
    예상 출력
    2
    3
    4
    0