만드는 중입니다

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

트리의 색깔과 쿼리 2

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

요약
루트가 있는 트리에서 부모 간선을 끊는 연산과, 정점 a와 연결된 정점들의 서로 다른 색 개수를 구하는 연산을 온라인으로 처리합니다.
난이도

어려움10점 중 8점

유형
트리, 유니온 파인드, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

정점이 NN개인 트리가 주어진다. 정점은 1번부터 NN번까지 번호가 매겨져 있고, 각 정점은 1 이상 100,000 이하의 자연수로 나타내는 색깔을 하나씩 갖는다. 루트는 1번 정점이다. 트리이므로 서로 다른 두 정점을 잇는 경로는 반드시 하나만 존재한다.

정점 uu와 vv를 잇는 경로가 존재하면 uu에서 vv로 갈 수 있다고 한다.

다음 두 종류의 쿼리를 처리해야 한다.

  • 1 a: 정점 aa와 aa의 부모 정점을 잇는 간선을 제거한다. 이 간선이 존재하는 경우에만 주어진다.
  • 2 a: 정점 aa에서 갈 수 있는 정점들만 보았을 때, 색깔의 종류 개수를 출력한다.

입력

첫 줄에 정점의 개수 NN(1≤N≤100,0001 \le N \le 100{,}000)과 2번 쿼리의 개수 QQ(1≤Q≤1,000,0001 \le Q \le 1{,}000{,}000)가 주어진다. 둘째 줄에는 N−1N-1개의 정수가 주어진다. ii번째 수는 정점 i+1i+1의 부모 정점이다. 셋째 줄에는 NN개의 정수가 주어진다. ii번째 수는 정점 ii의 색깔이다. 이어지는 N+Q−1N+Q-1개의 줄에 쿼리가 주어진다. 1번 쿼리는 N−1N-1개, 2번 쿼리는 QQ개이다. 각 쿼리는 한 줄에 쿼리 종류 XX (1≤X≤21 \le X \le 2)와 음이 아닌 정수 kk로 주어진다. 쿼리에서 처리할 정점의 번호 aa는 k⊕lstk \oplus \mathrm{lst}이며, 11 이상 NN 이하이다. ⊕\oplus는 배타적 논리합을 뜻한다. lst\mathrm{lst}는 가장 최근에 처리한 2번 쿼리의 결과이고, 초깃값은 0이다.

출력

QQ개의 2번 쿼리 각각에 대한 답을 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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