luogu#P5669. [SDOI2018] 原题识别-改

[SDOI2018] 原题识别-改

题目背景

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

题目描述

有一棵nn个点的有根树,根节点编号为11,且编号为ii的节点有颜色aia_i。你需要支持mm次询问。询问有以下两种格式:

  • 1 x y1~x~y:询问树上编号为xx的节点到编号为yy的节点的最短路径中,不同的颜色有多少种。

  • 2 a b2~a~b:在节点aa到根节点的路径中随机选择一个点xx,在节点bb到根节点的路径中随机选择一个点yy,求询问 1 x y1~x~y 的答案期望。(路径包含aa, bb和根节点)

对于询问22,设答案为ans\mathrm{ans}aa到根节点的路径经过的点数为cnta\mathrm{cnt_a}bb到根节点的路径经过的点数为cntb\mathrm{cnt_b},你只需要输出$\mathrm{ans}\cdot \mathrm{cnt_a}\cdot \mathrm{cnt_b}$。

输入格式

注意:输入格式与原题不同

每个测试点仅包含一组数据。

输入数据的第一行包含两个非负整数nn, mm,表示节点个数和询问次数。

接下来一行包含nn个正整数,第ii个正整数为aia_i,表示节点ii的颜色。

接下来n1n-1行,每行包含两个整数uu, vv,表示编号为uu的节点和编号为vv的节点之间存在一条边。保证输入的边构成一棵树。

接下来mm行,每行包含一个询问。询问的格式和意义见题目描述。

输出格式

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

5 3
1 4 4 5 4
1 2
2 3
3 4
2 5
1 2 3
2 1 3
1 3 2

1
5
1
10 5
3 4 3 8 9 3 2 8 5 7
1 2
2 3
3 4
4 5
5 6
4 7
4 8
8 9
8 10
1 1 10
2 3 5
2 7 5
2 5 4
1 8 6
4
34
61
45
3

提示

对于所有数据,保证1a1,a2,,ann1051\leq a_1, a_2, \ldots, a_n\leq n\leq 10^5, 1m2×1051\leq m\leq 2\times 10^5。保证输入的边构成一棵树。

子任务113030分):保证不存在询问22

子任务223030分):保证对于每一条边都有v=u+1v=u+1

子任务334040分):没有任何附加的限制。