만드는 중입니다

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

비트셋 마스터

시간 제한6초메모리 제한512 MB

요약
각 정점은 자기 자신만 담은 집합으로 시작합니다. 간선 연산은 양 끝 정점의 집합을 합치고, 질의는 정점 u를 포함하는 집합의 개수를 구합니다.
난이도

어려움10점 중 9점

유형
트리, 유니온 파인드, 분할 정복
정답자
아직 제출이 없습니다

문제

중국에서는 n=106n = 10^6인 문제에서도 O(n2)O(n^2) 알고리즘이 쉽게 통과한다는 것이 잘 알려져 있다.

정점이 nn개이고 간선이 n−1n-1개인 트리가 주어진다. 간선은 (u1,v1),(u2,v2),…,(un−1,vn−1)(u_1, v_1), (u_2, v_2), \ldots, (u_{n-1}, v_{n-1})이다. 각 정점 uu마다 집합 SuS_u가 있으며, 처음에는 Su={u}S_u = \{u\}이다.

연산은 두 종류이다.

  • "1 u": uu를 포함하는 집합 SvS_v (1≤v≤n1 \le v \le n)의 개수를 출력한다.
  • "2 p": pp번째 간선 (up,vp)(u_p, v_p)의 두 끝점에 해당하는 집합 SupS_{u_p}와 SvpS_{v_p}를 합집합 Sup∪SvpS_{u_p} \cup S_{v_p}로 둘 다 바꾼다.

mm개의 연산을 수행한다. 첫 번째 종류의 연산마다 답을 구한다.

시간 제한은 6000 ms, 메모리 제한은 512 MB이다.

입력

첫 줄에 정수 nn과 mm이 주어진다 (2≤n≤2×1052 \le n \le 2 \times 10^5, 1≤m≤6×1051 \le m \le 6 \times 10^5).

이어서 n−1n-1개의 줄에 간선을 나타내는 정수 uiu_i와 viv_i가 주어진다 (1≤ui,vi≤n1 \le u_i, v_i \le n).

이어서 mm개의 줄에 연산을 나타내는 정수 tt와 ww가 주어진다 (1≤t≤21 \le t \le 2, 1≤w≤n+1−t1 \le w \le n + 1 - t).

출력

첫 번째 종류의 연산마다 답을 한 줄에 정수 하나로 출력한다.

예제1

  1. 예제 1

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