标题来自:Pale - MIMI
题目描述
有一棵 n 个结点的树,每个点有点权 ai。
现在云浅会进行 q 次询问,第 i 次询问给出树上的 ki 条边,如果断掉这 ki 条边,那么树会分裂成 ki+1 个连通块。你需要对每个连通块 P 找到一个点 u,使得 ∑v∈Pdist(u,v)×av 最小。这里 dist(u,v) 指的是树上 u,v 两点之间最短路径上的边数。如果有多个,取编号最小的那个。
这里询问之间互相独立,也就是说并没有真的断掉这些边。
输入格式
本题有多组数据。
第一行一个正整数 T 表示数据组数。对于每组数据:
第一行两个正整数 n,q。
接下来一行 n 个正整数表示 a1,a2,⋯,an。
接下来 n−1 行,每行两个正整数 u,v 表示树上的一条边。
接下来 q 行每行先输入一个正整数 ki 表示这次询问断掉的边数,接下来输入 ki 个 [1,n−1] 中的正整数 p1,p2,⋯,pki 表示断掉输入的第 p1,p2,⋯,pki 条边。
输出格式
对于每组询问,假设你找到的 ki+1 个点的编号分别为 x1,x2,⋯,xki+1,你需要先把 x 升序排序,然后输出
(i=1∑ki+1528221i−1×xi)mod232的值。
样例 1 输入
样例 1 输出
样例 1 解释
实际上的答案为
以第一组数据的第三组询问为例:以下分别为原本的树和断掉边之后的树。


断掉边后图中有三个连通块:{1},{2,3,4},{5},取的最优点分别为 1,3,5,按升序输出为 1 3 5
。
测试点约束
对于所有数据:1≤n,q,∑ki≤2×105,1≤T≤10,1≤ai≤104,1≤ki≤n−1。
这里和以下表格中的 ∑ki 指的都是单组数据中 ki 的和,并非 T 组数据全部的 ki 之和。
子任务编号 |
n≤ |
q,∑ki≤ |
特殊性质 |
依赖子任务 |
分值 |
Subtask #1 |
20 |
2×105 |
ki≤10 |
无 |
12 |
Subtask #2 |
500 |
1 |
10 |
Subtask #3 |
5000 |
1,2 |
11 |
Subtask #4 |
105 |
保证输入的第 i 条边为 (i,i+1) |
无 |
15 |
Subtask #5 |
保证 ai=1 |
21 |
Subtask #6 |
2×105 |
无 |
1,2,3,4,5 |
31 |