#CF1120D. Power Tree

Power Tree

题目描述

给定一棵有 nn 个顶点的有根树,树的根为顶点 11。每个顶点都有一个非负的价格。树的叶子是指度为 11 且不是根的顶点。

Arkady 和 Vasily 在树上玩一个奇怪的游戏。游戏分为三个阶段。第一阶段,Arkady 购买树上的一些非空顶点集合。第二阶段,Vasily 给所有叶子节点赋一些整数。第三阶段,Arkady 可以进行若干次(也可以不进行)如下操作:选择他在第一阶段购买的某个顶点 vv 和某个整数 xx,然后将 xx 加到 vv 的子树中所有叶子的整数上。整数 xx 可以是正数、负数或零。

如果一条从叶子 aa 到根的简单路径经过顶点 bb,则称叶子 aa 在顶点 bb 的子树中。

Arkady 的目标是让所有叶子上的整数都变为零。无论 Vasily 在第二阶段如何赋值,Arkady 都要保证自己能够达成目标。请你求出 Arkady 在第一阶段至少需要支付的总费用 ss,以及有多少个顶点属于至少一个最优集合(即总费用为 ss 的集合),使得 Arkady 购买这些顶点后能够保证胜利。

请你输出所有属于至少一个最优集合的顶点编号。

输入格式

第一行包含一个整数 nn2n2000002 \le n \le 200\,000),表示树的顶点数。

第二行包含 nn 个整数 c1,c2,,cnc_1, c_2, \ldots, c_n0ci1090 \le c_i \le 10^9),其中 cic_i 表示第 ii 个顶点的价格。

接下来的 n1n-1 行,每行包含两个整数 aabb1a,bn1 \le a, b \le n),表示树上的一条边。

输出格式

第一行输出两个整数:Arkady 至少需要支付的最小总费用 ss,以及属于至少一个最优集合的顶点个数 kk

第二行输出 kk 个不同的整数,按升序排列,表示属于至少一个最优集合的顶点编号。

输入输出样例 #1

输入 #1

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

输出 #1

4 3
2 4 5 

输入输出样例 #2

输入 #2

3
1 1 1
1 2
1 3

输出 #2

2 3
1 2 3 

说明/提示

在第二个样例中,所有包含两个顶点的集合都是最优的。因此,每个顶点都至少属于一个最优集合。

由 ChatGPT 4.1 翻译