时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
蒟蒻

最近造了一棵可爱的树,有一天他不小心将颜料桶打翻了,树上的每个节点都染上了颜色。
蒟蒻

有点不知所措,但是神仙

看到之后,顺手就造了个题然后 1s 就切飞了。现在他把这个题给了蒟蒻,并声称:这个水题都不会做你还能自称是这棵树的主人吗?
蒟蒻

才不会认输,大胆地接下了这个问题:树是一棵以 1 为根的数,树上每个节点有一个颜色,节点 i 的颜色为

,神仙

会进行 m 次询问,每次给出 x,y,问有多少种颜色只在 x 和 y 的子树内出现过。
蒟蒻

不想认输,但是挣扎了一会发现并不会做,你能帮助蒟蒻

吗?(当然啦,你不帮这题就没分了:)
输入描述:
第一行两个整数 n,m。
第二行 n 个整数,第 i 个整数
表示节点 i 的颜色。
接下来 n-1 行每行两个整数 x,y,表示节点 x 和 y 之间有一条边。
接下来 m 行每行两个整数 x,y 表示一次询问。
输出描述:
输出 m 行,每行一个整数表示答案。
示例1
输入
复制
5 2
2 3 1 2 1
1 2
1 3
2 4
2 5
2 3
1 4
说明
对于第一组询问,颜色 1 分别在 3,5 号节点上出现,5 在 2 的子树内,所以颜色 1 只在 2 和 3 的子树内出现过,颜色 3 只在 2 号节点上出现过,所以颜色 3 也只在 2 和 3 的子树内出现过,于是答案为 1,3 两种颜色。
对于第二组询问,1 的子树就是整棵树,所以包含了所有三种颜色,答案为 3。