P10305 [THUWC 2020] 序排泡冒

题目背景

> You are given a peach tree $T$. > > You don't need to think of the peach. > > Because I'm going to talk about the tree.

题目描述

**冒泡排序算法**是一种广为人知的排序算法,其思路在于不断地交换相邻且逆序的两个元素,由于总的逆序对个数不断减少,冒泡排序算法一定可以终止。给 $a[0], a[1], \dots, a[n-1]$ **从小到大排序**的冒泡排序算法可以用下面的伪代码描述。 ```cpp for (int i = 1; i a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } ``` 其中 $k$ 称为冒泡排序进行的轮数,当 $k$ 取 $n$ 时,便可以保证序列被从小到大排序。 **序排泡冒算法**是一种鲜为人知的序排算法,其作用是给定一个长度为 $n$ 的序列 $a$ 和参数 $k$,输出所有可能的序列 $b$,满足其经过 $k$ 轮冒泡排序之后成为序列 $a$。 给定一棵树 $T$,结点用 $1,2, \dots, n$ 编号。每一个结点 $u$ 有一个点权 $p(u)$,保证 $p(1), p(2), \dots, p(n)$ 构成了 $\{1,2,\dots,n\}$ 的一个排列。换言之,满足 1. 对于 $u\ne v$,均有 $p(u)\ne p(v)$; 2. 对于任意的 $i\in \{1, 2, \dots, n\}$,均存在一个 $u$ 满足 $p(u)=i$。 对于这棵树,我们将进行 $m$ 次询问,每次询问给出两个结点 $u, v$ 和一个参数 $k$。用 $t_1, t_2, \dots, t_l$ 表示从 $u$ 到 $v$ 的唯一简单路径上**依次经过的所有结点的点权**组成的序列,可以看出 $t_1$ 就是 $p(u)$,$t_l$ 就是 $p(v)$,你需要计算序列 $t$ 和参数 $k$ 进行序排泡冒后,输出的排列序列个数。换言之,求有多少个序列满足其**经过 $k$ 轮冒泡排序后得到序列 $t$**。 由于答案很大,你只需要输出其对 $998,244,353$ 取模的结果(也就是说,输出答案除以 $998,244,353$ 的余数)。

输入格式

第一行包含两个用空格分隔的自然数 $n, m$,表示结点个数和询问个数。 接下来的一行包含 $n$ 用空格分隔的整数 $p(1), p(2), \dots, p(n)$,表示每个点的点权。 接下来 $n-1$ 行每行包含两个数 $x_i, y_i$,表示树上存在一条连接 $x_i$ 和 $y_i$ 上的边。输入的数据保证所有的边构成一棵树。 接下来 $m$ 行每行包含一个询问 $u_i, v_i, k_i$,其意义在题目描述中已经说明。

输出格式

输出包含 $m$ 行,第 $i$ 行包含一个整数,表示第 $i$ 个询问的答案对 $998,244,353$ 取模的结果。

说明/提示

**【样例解释 #1】** 在这组样例中,树构成了一个长度为 $4$ 的链。 1. 对于第一次询问,经过的结点序列为 $[1]$,点权序列为 $[1]$,序排泡冒输出 $\{[1]\}$。 2. 对于第二次询问,经过的结点序列为 $[1,2]$,点权序列为 $[1,3]$,序排泡冒输出 $\{[1,3], [3,1]\}$。 3. 对于第三次询问,经过的结点序列为 $[1,2,3]$,点权序列为 $[1,3,2]$,序排泡冒输出 $\{\}$。 4. 对于第四次询问,经过的结点序列为 $[1,2,3,4]$,点权序列为 $[1,3,2,4]$,序排泡冒输出 $\{[1,3,4,2], [3,1,4,2], [1,4,3,2], [4,1,3,2]\}$。 **【子任务】** |Subtask|$n$|$m$|$k$|Type|Score| |:--:|:--:|:--:|:--:|:--:|:--:| |$1$|$\le 5 \times 10^{5}$|$\le 5 \times 10^{5}$|$= 0$|$3$|$1$| |$2$|$\le 10$|$\le 1$|$\le n$|$1$|$4$| |$3$|$\le 10$|$\le 5 \times 10^{5}$|$\le n$|$3$|$3$| |$4$|$\le 10^{3}$|$\le 10^{3}$|$\le n$|$1$|$10$| |$5$|$\le 5 \times 10^{5}$|$\le 5 \times 10^{5}$|$\le n$|$1$|$12$| |$6$|$\le 5 \times 10^{5}$|$\le 5 \times 10^{5}$|$\le n$|$2$|$13$| |$7$|$\le 10^{3}$|$\le 10^{3}$|$\le n$|$3$|$5$| |$8$|$\le 10^{5}$|$\le 10^{5}$|$\le n$|$3$|$25$| |$9$|$\le 5 \times 10^{5}$|$\le 5 \times 10^{5}$|$\le n$|$3$|$27$| **对于所有数据,**$1\le n,m\le 5\times 10^5, 0\le k\le n$。 **数据类型含义:** - $\mathrm{Type}=1$:树构成一条链,即 $x_i = i,y_i=i+1$,并且所有的询问都满足 $u_1=1, v_i=n$。 - $\mathrm{Type}=2$:树构成一条链,即 $x_i = i,y_i=i+1$,并且所有的询问都满足 $u_i < v_i$。 - $\mathrm{Type} = 3$:无特殊限制。 **【提示】** > Don't be afraid of the pain in climbing. > > Your tough journey is just beginning. > > But the fruit you will gain is not only peaches. > > Keep counting on the tree! Young gentlemen and ladies. > > Hope in your heart will lead you to the destiny.