만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

쿠파의 파이프

면접 대비

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

요약
파이프가 워프 방을 거쳐 코인 방으로 이어지는 구조에서, 질의한 파이프와 같은 코인 방으로 가면서 워프 방을 가장 적게 거치는 파이프 번호를 구합니다. 동점이면 번호가 작은 파이프를 고릅니다.
난이도

보통10점 중 4점

유형
그래프, DFS
정답자
아직 제출이 없습니다

문제

피치 공주가 또 위험에 처했다. 마리오는 쿠파에게서 공주를 구하러 떠난다. 공주를 구하려면 지표면 아래에 있는 코인 방에서 코인을 여러 개 모아야 한다. 코인 방에 가려면 지표면에 있는 파이프에 들어가야 하고, 파이프는 아래 방으로 이어진다.

일부 파이프는 코인 방으로 바로 이어지지 않고 워프 방으로 이어진다. 워프 방은 다시 다른 워프 방으로 이어질 수 있으며, 마리오가 결국 코인 방에 도달할 때까지 계속된다. 마리오가 파이프 하나를 고르면, 코인 방에 도착할 때까지 제어권을 되찾지 못한 채 파이프를 따라 워프된다.

마리오는 워프되는 것을 싫어한다. 그래서 동생 루이지에게 도움을 청한다. 루이지는 몇몇 파이프에 뛰어들어 그 파이프가 최종적으로 어느 코인 방으로 이어지는지 알아내고, 이 정보를 마리오와 공유한다.

마리오는 루이지가 찾은 코인 방으로 이어지는 파이프 중에서, 가는 길에 거치는 워프 방의 수가 가장 적은 파이프에 뛰어든다. 그러면 마리오는 멀미를 피하고 피치 공주에게 좋은 인상을 줄 수 있다.

입력

첫 줄에 정수 NN (0<N≤100 0000 < N \le 100\,000)이 주어진다. NN은 파이프, 워프 방, 코인 방을 합친 개수이며, 00부터 N−1N-1까지 번호가 붙어 있다. 둘째 줄에는 공백으로 구분된 정수 NN개 FiF_i (−1≤Fi<N-1 \le F_i < N)가 주어진다. FiF_i는 번호 ii인 파이프나 워프 방에 들어갔을 때 마리오가 이동하는 워프 방 또는 코인 방의 번호다. Fi=−1F_i = -1이면 마리오가 최종적으로 코인 방에 도착했다는 뜻이다. 모든 워프 방에는 그곳으로 이어지는 파이프가 최소 하나 있다. 어떤 파이프에 들어가든 루이지는 유한한 횟수의 이동 후에 반드시 코인 방에 도착한다.

셋째 줄에는 마리오가 루이지에게 뛰어들라고 부탁한 파이프의 개수 AA (0<A≤100 0000 < A \le 100\,000)가 주어진다. 다음 줄에는 루이지가 들어가는 파이프의 번호 DiD_i (0≤Di<N0 \le D_i < N)가 AA개 주어진다.

출력

루이지가 들어가는 파이프마다 그 파이프가 이어지는 코인 방을 찾는다. 그리고 마리오가 들어가야 할 파이프의 번호를 출력한다. 이 파이프는 같은 코인 방으로 이어지면서, 가는 길에 거치는 워프 방의 수가 가장 적은 파이프다. 워프 방의 수가 같으면 번호가 가장 작은 파이프를 출력한다.

예제1

  1. 예제 1

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