만드는 중입니다

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

점프하는 불빛

시간 제한3초메모리 제한2048 MB

요약
트리에서 정점을 표시하거나 해제하는 질의와, 이웃에 표시된 정점이 있으면 그 정점을 표시하는 전체 갱신 질의를 처리합니다. 매 질의 후 표시된 정점의 개수를 출력합니다.
난이도

어려움10점 중 8점

유형
트리, BFS, 구현
정답자
아직 제출이 없습니다

문제

트리가 주어진다. 트리는 nn개의 정점과 n−1n-1개의 간선으로 이루어진 연결된 무방향 그래프이다. 처음에는 어떤 정점도 표시되어 있지 않다. 다음 세 종류의 쿼리를 qq개 처리하라.

  • 0 w: 정점 ww의 표시를 지운다. ww가 표시되어 있지 않으면 아무 일도 일어나지 않는다.
  • 1 w: 정점 ww를 표시한다. 이미 표시되어 있으면 아무 일도 일어나지 않는다.
  • 2: 트리의 모든 정점을 동시에 갱신한다. 표시된 이웃 정점이 하나 이상인 정점은 표시하고, 그 밖의 정점은 표시를 지운다.

각 쿼리를 처리한 뒤, 트리에서 표시된 정점의 개수를 구하라.

입력

첫 줄에 두 정수 nn과 qq (2≤n≤3⋅1052 \le n \le 3 \cdot 10^5, 1≤q≤1061 \le q \le 10^6)가 주어진다.

다음 n−1n-1개의 줄에는 트리의 간선을 나타내는 두 정수 uu와 vv (1≤u,v≤n1 \le u, v \le n)가 주어진다.

다음 qq개의 줄에는 위에서 설명한 형식의 쿼리가 주어진다 (1≤w≤n1 \le w \le n).

출력

한 줄에 qq개의 정수를 출력하라. 각 정수는 해당 쿼리를 처리한 뒤 표시된 정점의 개수이다.

예제2

  1. 예제 1

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

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