루트가 있는 트리에서 정점을 삭제하면 자식들이 조부모에게 붙고, 살아 있는 두 정점 사이의 거리를 묻는 쿼리에 답한다.
어려움8트리DFS세그먼트 트리동적 계획법아직 제출이 없습니다시간 제한2초메모리 제한512 MB정점이 n개인 루트 있는 트리가 있다. 정점 번호는 1번부터 n번까지이고, 1번 정점이 루트다. 루트 있는 트리는 연결된 무향 그래프에서 정점 하나를 루트로 정한 것이다. 각 정점에서 루트에 가장 가까운 이웃이 그 정점의 부모이고, 나머지 이웃은 자식이다. 루트에는 부모가 없다.
이 트리에 두 종류의 질의를 순서대로 처리한다.
첫 번째는 삭제다. 정점 u를 삭제하면 u의 자식은 모두 u의 부모의 자식이 된다. 루트는 삭제하지 않는다.
두 번째는 거리 계산이다. 현재 트리에서 두 정점을 잇는 경로의 길이를 구한다. 경로의 길이는 그 경로에 놓인 간선의 개수다.
거리를 묻는 질의마다 답을 출력하라.
첫째 줄에 처음 트리의 정점 개수 n이 주어진다. (1≤n≤100000)
둘째 줄에 정점 2,3,…,n의 부모 번호 pi가 순서대로 주어진다. (1≤pi≤n) n이 1이면 둘째 줄은 빈 줄이다.
셋째 줄에 질의의 개수 q가 주어진다. (1≤q≤100000)
다음 q개 줄에 질의가 한 줄에 하나씩 주어진다. 각 질의는 1 또는 2인 정수로 시작한다. 첫 정수가 1이면 정수 a와 b가 이어서 주어지고, 현재 트리에서 a와 b 사이의 거리를 구해야 한다. (1≤a,b≤n) 첫 정수가 2이면 정수 v 하나가 이어서 주어지고, 정점 v를 삭제해야 한다. (1≤v≤n)
처음 주어지는 트리는 항상 올바르다. 질의에 등장하는 정점은 아직 삭제되지 않은 정점이고, 루트는 삭제할 정점으로 주어지지 않는다.
첫 정수가 1인 질의마다 두 정점 사이의 거리를 한 줄에 하나씩 출력한다.