트리의 색깔과 쿼리 2
시간 제한2초메모리 제한256 MB
루트가 있는 트리에서 부모 간선을 끊는 연산과, 정점 a와 연결된 정점들의 서로 다른 색 개수를 구하는 연산을 온라인으로 처리합니다.
문제
정점이 개인 트리가 주어진다. 정점은 1번부터 번까지 번호가 매겨져 있고, 각 정점은 1 이상 100,000 이하의 자연수로 나타내는 색깔을 하나씩 갖는다. 루트는 1번 정점이다. 트리이므로 서로 다른 두 정점을 잇는 경로는 반드시 하나만 존재한다.
정점 와 를 잇는 경로가 존재하면 에서 로 갈 수 있다고 한다.
다음 두 종류의 쿼리를 처리해야 한다.
- 1 a: 정점 와 의 부모 정점을 잇는 간선을 제거한다. 이 간선이 존재하는 경우에만 주어진다.
- 2 a: 정점 에서 갈 수 있는 정점들만 보았을 때, 색깔의 종류 개수를 출력한다.
입력
첫 줄에 정점의 개수 ()과 2번 쿼리의 개수 ()가 주어진다. 둘째 줄에는 개의 정수가 주어진다. 번째 수는 정점 의 부모 정점이다. 셋째 줄에는 개의 정수가 주어진다. 번째 수는 정점 의 색깔이다. 이어지는 개의 줄에 쿼리가 주어진다. 1번 쿼리는 개, 2번 쿼리는 개이다. 각 쿼리는 한 줄에 쿼리 종류 ()와 음이 아닌 정수 로 주어진다. 쿼리에서 처리할 정점의 번호 는 이며, 이상 이하이다. 는 배타적 논리합을 뜻한다. 는 가장 최근에 처리한 2번 쿼리의 결과이고, 초깃값은 0이다.
출력
개의 2번 쿼리 각각에 대한 답을 순서대로 한 줄에 하나씩 출력한다.