만드는 중입니다

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

Bessie의 눈 소

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

요약
루트가 1번인 트리에서 서브트리에 색을 칠하는 연산을 처리하고, 질의한 서브트리 안 각 눈덩이가 가진 서로 다른 색 개수의 합을 구합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 세그먼트 트리, 해시맵
정답자
아직 제출이 없습니다

문제

농장에 눈이 내려, Bessie는 겨울마다 그랬듯이 눈으로 소를 만들고 있다. 보통은 실제 소와 최대한 비슷하게 만들지만, 올해는 추상적인 작품을 만들기로 하고 나무 모양의 조각을 만든다. 이 조각은 NN개의 눈덩이 (1≤N≤105)(1\le N\le 10^5)와 N−1N-1개의 가지로 이루어진다. 각 가지는 눈덩이 두 개를 잇고, 임의의 두 눈덩이 사이의 경로는 하나뿐이다.

Bessie는 눈덩이 하나에 코를 달았다. 그래서 그 눈덩이가 눈 소의 머리가 된다. 이 눈덩이를 1번 눈덩이라고 한다.

Bessie는 색 염료가 든 양동이를 눈덩이에 뿌려서 조각의 일부를 물들인다. 색은 11부터 10510^5까지의 정수이며, 각 색의 양동이는 무한히 있다. Bessie가 눈덩이 xx에 색 cc를 뿌리면, xx의 서브트리에 있는 모든 눈덩이에도 색 cc가 입혀진다. 눈덩이 yy는 yy에서 1번 눈덩이로 가는 경로 위에 xx가 있을 때 xx의 서브트리에 속한다. 한 번 입힌 색은 계속 남는다. 예를 들어 눈덩이에 색 [1,2,3][1,2,3]이 있을 때 색 4를 뿌리면, 그 눈덩이의 색은 [1,2,3,4][1,2,3,4]가 된다.

눈덩이 xx의 색 다양성은 xx에 입혀진 서로 다른 색의 개수이다. Bessie가 눈덩이 xx에 대해 물으면, xx의 서브트리에 있는 모든 눈덩이의 색 다양성 합을 답한다. Bessie가 물을 때마다 이 값을 구하라.

입력

첫 줄에 NN과 질의의 개수 QQ (1≤Q≤105)(1\le Q\le 10^5)가 주어진다.

다음 N−1N-1개 줄에는 눈덩이 aa와 bb를 잇는 가지를 나타내는 정수 두 개 aa, bb (1≤a,b≤N)(1 \le a, b \le N)가 주어진다.

마지막 QQ개 줄에는 질의가 주어진다. 다음 형식의 줄은 Bessie가 눈덩이 xx에 색 cc의 염료를 뿌려서 xx의 서브트리 전체를 물들인다는 뜻이다.

1 x c

다음 형식의 줄은 눈덩이 xx의 서브트리에 있는 색 다양성의 합을 묻는다.

2 x

여기서 1≤x≤N1\le x\le N, 1≤c≤1051\le c\le 10^5이다.

출력

종류 2 질의마다, 해당 서브트리의 색 다양성 합을 한 줄에 출력한다. 오버플로를 피하려면 64비트 정수를 써야 한다.

힌트

첫 번째 종류 1 질의 후에 눈덩이 4가 색 1로 물든다.

두 번째 종류 1 질의 후에 눈덩이 4와 5가 색 1로 물든다.

세 번째 종류 1 질의 후에 모든 눈덩이가 색 1로 물든다.

예제1

  1. 예제 1

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