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

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

특별한 그래프

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

요약
나가는 간선이 최대 하나인 방향 그래프에서 간선 삭제를 반영하며 a에서 시작한 걸음이 b에 닿는 거리를 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 트리, 유니온 파인드
정답자
아직 제출이 없습니다

문제

정점이 NN개인 방향 그래프가 있다. 이 그래프는 정점마다 나가는 간선이 최대 한 개라는 점이 특별하다. 다음 두 종류의 질의를 처리한다.

  • 1 a: 정점 aa에서 나가는 간선을 지운다. 이 간선은 반드시 존재한다.
  • 2 a b: 정점 aa에서 정점 bb로 가는 최단 경로의 길이를 출력한다. 경로가 없으면 -1을 출력한다.

경로의 길이는 지나는 간선의 개수다. 정점에서 나가는 간선이 최대 한 개이므로 aa에서 출발하는 경로는 하나뿐이고, 그 경로를 따라가다 bb에 처음 닿을 때까지 지난 간선의 수가 답이다. aa와 bb가 같으면 답은 0이다.

입력

첫째 줄에 정점의 개수 NN (1≤N≤1051 \le N \le 10^5)이 주어진다.

둘째 줄에 정수 NN개 next1,next2,…,nextNnext_1, next_2, \dots, next_N (0≤nexti≤N0 \le next_i \le N)이 주어진다. nextinext_i는 정점 ii에서 정점 nextinext_i로 가는 간선이 있다는 뜻이고, nexti=0next_i = 0이면 정점 ii에서 나가는 간선이 없다.

셋째 줄에 질의의 개수 MM (1≤M≤1051 \le M \le 10^5)이 주어진다.

다음 MM개의 줄에 질의가 한 줄에 하나씩 주어진다. 형식은 위에서 설명한 것과 같고, 1≤a,b≤N1 \le a, b \le N이다.

출력

2 a b 질의마다 답을 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.

예제2

  1. 예제 1

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

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