CFCF2209F.Dynamic Values And Maximum Sum
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一棵有 n 个顶点的树 ∗,顶点编号为 1 到 n,每个顶点 i 有一个初始值 ai。你可以执行 k 次操作,总和初始为 0。每次操作如下:
- 选择一个顶点 r,并将树的根定为 r。
- 将当前 r 的值加到总和中,并将 r 的值设为 0。
- 对于每个不是叶子的顶点 u,在 u 的子树 ‡ 中,找到距离 u 最远的叶子 †;若有多个,则选择编号最小的那个,记为 u 的目的地。将 u 当前的值加到目的地的值上,并将 u 的值设为 0。
请你求出可能得到的最大总和。
∗ 树是无环连通图。
† 叶子是没有子节点的顶点。
‡ 顶点 v 的子树是 v、其所有后代以及它们之间所有边所构成的子图。
输入格式
每个测试包含多个测试用例。第一行包含测试用例数 t (1≤t≤104)。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 k (1≤k≤n≤3⋅105)。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示各顶点的初始值。
随后的 n−1 行,每行包含两个整数 u,v,表示 u 和 v 之间有一条边。保证这些边构成一棵树。
保证所有测试用例中 n 的总和不超过 3⋅105。
输出格式
对于每个测试用例,输出一个整数,表示可能得到的最大总和。
输入输出样例
输入#1
7 5 4 19 20 39 81 2 1 2 1 3 2 4 2 5 5 3 12 21 39 8 21 1 2 1 3 3 4 2 5 5 2 129 216 32 83 221 1 2 1 3 3 4 4 5 5 3 15 15 15 15 15 1 2 1 3 1 4 1 5 1 1 1 2 1 1 1000000000 1 2 7 2 8 3 5 7 9 1 6 4 3 7 5 5 2 2 3 3 6 6 1
输出#1
161 101 681 60 1 1000000000 32
说明/提示
在第一个测试用例中:
-
选择顶点 1 作为根。将 a1=19 加入总和,并置 a1=0。以 1 为根时,对每个非叶子顶点 u,将其值传递给其子树中距离 u 最远的叶子(如有多解,取编号最小者)。具体如下:
- 顶点 2 的值传递给顶点 4,a2 变为 0,a4 变为 101。
- 顶点 3、4 和 5 的值均不变化。
-
选择顶点 3 作为根。将 a3=39 加入总和,并置 a3=0。以 3 为根时,4 和 5 上的值仍保留原位置。
-
选择顶点 4 作为根。将 a4=101 加入总和,并置 a4=0。以 4 为根时,5 上的值仍保留原位置。
-
选择顶点 5 作为根。将 a5=2 加入总和,并置 a5=0。
最终总和为 19+39+101+2=161。
在第六个测试用例中,选择顶点 2 作为根,则总和为 1000000000。