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

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

Äventyr 2

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

요약
트리에서 시간이 지나며 정점이 하나씩 표시되고, 질의한 정점에서 가장 가까운 표시된 정점까지의 거리를 구한다.
난이도

어려움10점 중 8점

유형
트리, BFS, 누적 합, DFS
정답자
아직 제출이 없습니다

문제

"Äventyr bortom tidpunkten, Sista Fiolen."

여러 시간축을 오가며 잊혀진 나라의 전설의 바이올린을 찾으려 한다. 시간축은 트리의 정점으로 나타내고, 트리의 간선은 두 시간축 사이를 오갈 수 있다는 뜻이다. 시간축에는 편의상 11부터 NN까지 번호를 붙인다. 시간축 중 몇몇은 전설의 바이올린이 있는 시간축이고, 나머지는 아니다. 처음에는 바이올린이 있는 시간축이 하나도 없다. 트리가 주어진 뒤 다음 두 종류의 쿼리를 QQ번 수행하라.

  • 1 u: uu번 시간축이 바이올린이 있는 시간축이 된다.
  • 2 u: uu번 시간축에서 출발해 바이올린이 있는 시간축에 도착할 때까지 간선을 최소 몇 번 지나야 하는지 출력한다. 바이올린이 있는 시간축이 하나도 없으면 −1-1을 출력한다.

입력

첫째 줄에 NN과 QQ가 주어진다. (1≤N,Q≤1051 \le N, Q \le 10^5)

둘째 줄에 N−1N-1개의 정수 A2,A3,…,ANA_2, A_3, \ldots, A_N이 주어진다. AiA_i는 트리에서 ii번 시간축의 부모가 AiA_i번 시간축이라는 뜻이다. (1≤Ai≤N1 \le A_i \le N, Ai≠iA_i \ne i) 주어진 간선은 항상 하나의 트리를 이룬다. N=1N = 1이면 둘째 줄은 비어 있다.

다음 QQ개의 줄에 쿼리가 c v 형식으로 한 줄에 하나씩 주어진다. c=1c = 1이면 1번 쿼리, c=2c = 2이면 2번 쿼리를 수행한다. (1≤v≤N1 \le v \le N) 1번 쿼리는 같은 시간축에 두 번 이상 주어지지 않는다.

출력

2번 쿼리마다 그 결과를 한 줄에 하나씩 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    20 10
    1 2 3 3 5 5 2 8 9 9 8 1 13 14 14 1 17 18 18
    2 10
    1 14
    2 6
    2 19
    1 20
    2 4
    2 17
    2 1
    2 2
    2 12
    
    예상 출력
    -1
    6
    5
    5
    2
    2
    3
    5