#CF620E. New Year Tree

New Year Tree

好的,这是您要求的算法题面中文翻译和排版:


E. 新年树

每个测试的时间限制:33
每个测试的内存限制:256256 MB
输入:标准输入
输出:标准输出

新年假期结束了,但 Resha 不想扔掉新年树。他邀请了他最好的朋友 Kerim 和 Gural 来帮忙重新装饰这棵新年树。

这棵新年树是一棵无向树,有 nn 个顶点,根在顶点 11

你需要处理以下两种类型的查询:

  • 将顶点 vv 的子树中所有顶点的颜色改为颜色 cc
  • 查询顶点 vv 的子树中不同颜色的数量。

输入

第一行包含两个整数 n,mn, m1n,m41051 \le n, m \le 4 \cdot 10^5)—— 树的顶点数和查询数。

第二行包含 nn 个整数 cic_i1ci601 \le c_i \le 60)—— 第 ii 个顶点的颜色。

接下来的 n1n-1 行每行包含两个整数 xj,yjx_j, y_j1xj,yjn1 \le x_j, y_j \le n)—— 第 jj 条边的两个顶点。保证给出的是一棵正确的无向树。

最后的 mm 行包含查询的描述。每个查询描述以整数 tkt_k1tk21 \le t_k \le 2)开头 —— 第 kk 个查询的类型。对于第一类查询,后面跟着两个整数 vk,ckv_k, c_k1vkn,1ck601 \le v_k \le n, 1 \le c_k \le 60)—— 需要重新着色的子树的根顶点编号和新的颜色 ckc_k。对于第二类查询,后面跟着一个整数 vkv_k1vkn1 \le v_k \le n)—— 需要查询其子树中不同颜色数量的顶点编号。

输出

对于每个第二类查询,输出一个整数 aa —— 查询中给出的顶点子树中不同颜色的数量。

每个数字应按查询在输入中出现的顺序,单独打印在一行上。

示例

输入示例 1:

7 10
1 1 1 1 1 1 1
1 2
1 3
1 4
3 5
3 6
3 7
1 3 2
2 1
1 4 3
2 1
1 2 5
2 1
1 6 4
2 1
2 2
2 3

输出示例 1:

2
3
4
5
1
2

输入示例 2:

23 30
1 2 2 6 5 3 2 1 1 1 2 4 5 3 4 4 3 3 3 3 3 4 6
1 2
1 3
1 4
2 5
2 6
3 7
3 8
4 9
4 10
4 11
6 12
6 13
7 14
7 15
7 16
8 17
8 18
10 19
10 20
10 21
11 22
11 23
2 1
2 5
2 6
2 7
2 8
2 9
2 10
2 11
2 4
1 12 1
1 13 1
1 14 1
1 15 1
1 16 1
1 17 1
1 18 1
1 19 1
1 20 1
1 21 1
1 22 1
1 23 1
2 1
2 5
2 6
2 7
2 8
2 9
2 10
2 11
2 4

输出示例 2:

6
1
3
3
2
1
2
3
5
5
1
2
2
1
1
1
2
3