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