题目描述
九条可怜是一个喜欢算法的女孩子,在众多算法中她尤其喜欢深度优先搜索(DFS)。
有一天,可怜得到了一棵有根树,树根为 root,树上每个节点 x 有一个权值 ax。
在一棵树上从 x 出发,寻找 y 节点,如果使用深度优先搜索,则可描述为以下演算过程:
- 将递归栈设置为空。
- 首先将节点 x 放入递归栈中。
- 从递归栈中取出栈顶节点,如果该节点为 y,则结束演算过程;否则,如果存在未访问的直接子节点,则以均等概率随机选择一个子节点加入递归栈中。
- 重复步骤 3,直到不存在未访问的直接子节点。
- 将上一级节点加入递归栈中,重复步骤 3。
- 重复步骤 5,直至当前一级节点为 x,演算过程结束。
我们定义 f(x,y) 合法当且仅当 y 在 x 的子树中。它的值为从 x 出发,对 x 的子树进行深度优先搜索寻找 y 期间访问过的所有节点(包括 x 和 y)权值最小值的期望。
九条可怜想知道对于所有合法的点对 (x,y),∑f(x,y) 的值。你只需要输出答案对 998244353 取模的结果。具体地,如果答案的最简分数表示为 ba,输出 a×b−1mod998244353。
输入格式
输入包含多组数据,第一行输入数据组数 T。
对于接下来的每组数据,第一行两个整数 n,root,分别表示树的大小,树根的编号。
接下来一行 n 个整数 a1,a2,…,an,表示树上每个节点的权值。
接下来 n−1 行,每行包含两个整数 u,v,表示 u 和 v 之间有一条树边。
输出格式
对于每组数据,输出一行,包含一个整数,代表对于所有合法点对 (x,y),∑f(x,y) 对 998244353 取模的结果。
提示
对于所有测试点,满足 1≤T≤100,∑n≤8×105,1≤n≤4×105,1≤root,u,v≤n,1≤ai≤109。
每个测试点的具体限制见下表:
测试点编号 |
∑n≤ |
n≤ |
特殊限制 |
1 |
50 |
10 |
无 |
2∼4 |
40000 |
5000 |
5∼10 |
4×105 |
105 |
11 |
8×105 |
4×105 |
树的生成方式随机 |
12 |
树是一条链 |
13 |
根的度数为 n−1 |
14∼20 |
无 |
对于测试点 11,树的生成方式为:以 1 为根,对于节点 i∈[2,n],从 [1,i−1] 中等概率随机选
择一个点作为父亲。之后将编号随机重排。