마블

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

요약
각 정점이 outgoing edge를 최대 1개 갖는 방향 그래프에서 도착 정점 조회와 간선 삭제 질의를 유니온-파인드로 처리하는 문제입니다.
난이도

보통10점 중 6점

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

문제

민혁이는 매주 금요일마다 지수와 함께 논다. 이번 주 금요일은 두 사람이 친구가 된 지 십 년이 되는 날이다. 그래서 둘은 특별한 게임을 하기로 했다. 민혁이는 흙바닥 운동장을 예약했고, 지수는 조약돌 하나를 가져왔다.

먼저 민혁이는 운동장 바닥에 나뭇가지로 방향 그래프를 그린다. 각 정점에는 나가는 간선이 최대 하나만 있다. 그다음 민혁이는 조약돌을 한 정점 위에 올려놓는다. 조약돌이 있는 정점에 나가는 간선이 있으면 조약돌은 그 간선을 따라 이동하고, 도착한 정점에서도 같은 과정을 반복한다. 나가는 간선이 없는 정점에 도착하면 조약돌은 그 정점에서 멈춘다. 어떤 경우에는 조약돌이 영원히 움직일 수도 있고, 어떤 정점은 한 번도 방문하지 않을 수도 있다.

민혁이는 지수가 규칙을 제대로 이해했는지 확인하기 위해 다음 두 종류의 질문을 한다.

  • 1 X: 조약돌을 정점 X에 놓았을 때, 조약돌이 영원히 움직이지 않는다면 멈추는 정점 번호를 묻는다.
  • 2 X: 정점 X에서 나가는 간선을 삭제한다. 이 질문에는 항상 현재 나가는 간선이 있는 정점만 주어진다.

민혁이의 질문이 주어졌을 때, 지수가 해야 할 답을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 그래프의 정점 수 N이 주어진다. (1 <= N <= 300000)

둘째 줄에는 1번 정점부터 N번 정점까지 각 정점의 나가는 간선 도착점이 공백으로 구분되어 주어진다. 정점 번호는 1부터 시작하며, 나가는 간선이 없는 경우에는 0이 주어진다.

셋째 줄에 질문의 수 Q가 주어진다. (1 <= Q <= 300000)

다음 Q개 줄에는 문제 설명에 나온 형식대로 질문이 하나씩 주어진다.

출력

1 X 질문이 주어질 때마다 답을 한 줄에 하나씩 출력한다. 조약돌이 나가는 간선이 없는 정점에서 멈춘다면 그 정점 번호를 출력한다. 조약돌이 어떤 정점에도 멈추지 않고 영원히 움직인다면 CIKLUS를 출력한다.

예제2

  1. 예제 1

    입력
    3
    2 3 1
    7
    1 1
    1 2
    2 1
    1 2
    1 1
    2 2
    1 2
    
    예상 출력
    CIKLUS
    CIKLUS
    1
    1
    2
    
  2. 예제 2

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