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$分):没有任何附加的限制。