P5669 [SDOI2018] 原题识别-改

题目背景

蒟蒻$\color{grey}{\text{suwakow}}$花了三天时间,研究出了[这道题](https://www.luogu.org/problem/P4618)的**线性空间**,且不依赖输入的随机性的一种优(du)秀(liu)做法。于是她决定拿出来毒瘤一下大家。

题目描述

有一棵 $n$ 个点的有根树,根节点编号为 $1$,且编号为 $i$ 的节点有颜色 $a_i$。你需要支持 $m$ 次询问。询问有以下两种格式: - $1~x~y$:询问树上编号为 $x$ 的节点到编号为 $y$ 的节点的最短路径中,不同的颜色有多少种。 - $2~a~b$:在节点 $a$ 到根节点的路径中随机选择一个点 $x$,在节点 $b$ 到根节点的路径中随机选择一个点 $y$,求询问 $1~x~y$ 的答案期望。(路径包含 $a,b$ 和根节点) 对于询问 $2$,设答案为 $\mathrm{ans}$,$a$ 到根节点的路径经过的点数为 $\mathrm{cnt_a}$,$b$ 到根节点的路径经过的点数为 $\mathrm{cnt_b}$,你只需要输出 $\mathrm{ans}\cdot \mathrm{cnt_a}\cdot \mathrm{cnt_b}$。

输入格式

**注意:输入格式与原题不同。** 每个测试点仅包含一组数据。 输入数据的第一行包含两个非负整数 $n,m$,表示节点个数和询问次数。 接下来一行包含 $n$ 个正整数,第 $i$ 个正整数为 $a_i$,表示节点 $i$ 的颜色。 接下来 $n-1$ 行,每行包含两个整数 $u,v$,表示编号为 $u$ 的节点和编号为 $v$ 的节点之间存在一条边。保证输入的边构成一棵树。 接下来 $m$ 行,每行包含一个询问。询问的格式和意义见题目描述。

输出格式

输出 $m$ 行,第 $i$ 行包含一个非负整数,表示第 $i$ 次询问的答案。

说明/提示

对于所有数据,保证 $1\leq a_1, a_2, \ldots, a_n\leq n\leq 10^5$,$1\leq m\leq 2\times 10^5$。保证输入的边构成一棵树。 子任务 $1$($30$ 分):保证不存在询问 $2$。 子任务 $2$($30$ 分):保证对于每一条边都有 $v=u+1$。 子任务 $3$($40$ 分):没有任何附加的限制。