Leonard的树
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

Leonard 有一棵以 1 号节点为根的树,每一个节点有一个颜色 c (),你需要对这棵树进行 q 次操作,操作有以下两种:
1.将一个节点的颜色修改为 y ()。
2.给出 m 个节点,请你输出这 m 个节点的子树的并集中 1 到 10 每种颜色出现的次数,不保证 m 个节点互不相同。  
子树的并集:例如,有 3 个节点,如果 2 号节点和 3 号节点都在 1 号节点的子树中, 并且 3 号节点在 2 号节点的子树中,那么 1 号节点的子树和 2 号节点的子树的并集为 。  

输入描述:

第一行包含两个整数 n () ,q (),分别表示这棵树的节点个数和操作的总个数。
接下来 n - 1 行,每一行两个整数 uv,表示在这棵树中 u 号节点与 v 号节点之间有一条边。(
下一行 n 个整数,第 i 个整数 c_i () 表示 i 号节点的初始颜色。
接下来 q 行,每行第一个数字 op 表示为第几种操作, 时,接下来两个整数 x (),y (),表示将 x 号节点的颜色修改为 y 时,输入一个整数 m ,表示此次操作涉及的节点个数,接下来 m 个整数表示需要进行操作 2 的节点。(

输出描述:

对于每次 2 操作输出一行十个整数。
示例1

输入

复制
3 3
1 2
2 3
1 1 2
2 2 1 2
1 1 2
2 2 1 2

输出

复制
2 1 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0