A16786 | Cost of Tree
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
对于一棵以节点 $r$ 为根的树 $T$,每个节点 $u$ 关联有一个权值 $a_u$,定义这棵树的代价为:
$$ \sum_{u\in T} (a_u \cdot d(r,u)) $$
其中,求和对树 $T$ 中所有的节点 $u$ 进行,$d(r,u)$ 表示节点 $r$ 到节点 $u$ 在树上最短路径的边数。
你将得到一棵包含 $n$ 个节点的树,以 $1$ 号节点作为根节点。每个节点 $i$ 分配有一个权值 $a_i$。对于每个 $r$ ($r$ 从 $1$ 到 $n$),请独立地解决如下问题:
考虑以节点 $1$ 为根时,关于节点 $r$ 的“子树”——即包含所有满足从 $1$ 到 $u$ 的最短路径经过 $r$ 的节点 $u$ 的那棵树。对于这个子树:
在最多进行一次如下操作后,求子树的最大代价:
- 任选一个节点 $u$($u\neq r$)。删除节点 $u$ 与其父节点之间的边 $^*$。然后,将 $u$ 与仍然能从 $r$ 到达的任意节点 $v$ 相连。可以证明,执行该操作后,图依然保持为树。
如下图,是 $r=1$,$u=5$,$v=4$ 时的一次操作示例。

$^*$更正式地说,是删除 $u$ 到 $p$ 的边,其中 $p$ 是唯一满足 $d(u,p)=1$ 且 $d(u,r)=d(p,r)+1$ 的节点。
$$ \sum_{u\in T} (a_u \cdot d(r,u)) $$
其中,求和对树 $T$ 中所有的节点 $u$ 进行,$d(r,u)$ 表示节点 $r$ 到节点 $u$ 在树上最短路径的边数。
你将得到一棵包含 $n$ 个节点的树,以 $1$ 号节点作为根节点。每个节点 $i$ 分配有一个权值 $a_i$。对于每个 $r$ ($r$ 从 $1$ 到 $n$),请独立地解决如下问题:
考虑以节点 $1$ 为根时,关于节点 $r$ 的“子树”——即包含所有满足从 $1$ 到 $u$ 的最短路径经过 $r$ 的节点 $u$ 的那棵树。对于这个子树:
在最多进行一次如下操作后,求子树的最大代价:
- 任选一个节点 $u$($u\neq r$)。删除节点 $u$ 与其父节点之间的边 $^*$。然后,将 $u$ 与仍然能从 $r$ 到达的任意节点 $v$ 相连。可以证明,执行该操作后,图依然保持为树。
如下图,是 $r=1$,$u=5$,$v=4$ 时的一次操作示例。

$^*$更正式地说,是删除 $u$ 到 $p$ 的边,其中 $p$ 是唯一满足 $d(u,p)=1$ 且 $d(u,r)=d(p,r)+1$ 的节点。
输入格式
每个测试用例包含多组数据。第一行包含一个整数 $t$($1\leq t\leq 10^4$)——表示测试用例的组数。
每组测试用例的第一行包含一个整数 $n$($1 \leq n \leq 2 \times 10^5$)——树的节点数。
接下来一行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 2 \times 10^5$)。
接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1\leq u, v\leq n$),表示第 $i$ 条边连接的两个节点。
保证所给的边形成一棵树。
保证所有测试用例中 $n$ 的总和不超过 $2\times 10^5$。
每组测试用例的第一行包含一个整数 $n$($1 \leq n \leq 2 \times 10^5$)——树的节点数。
接下来一行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 2 \times 10^5$)。
接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1\leq u, v\leq n$),表示第 $i$ 条边连接的两个节点。
保证所给的边形成一棵树。
保证所有测试用例中 $n$ 的总和不超过 $2\times 10^5$。
输出格式
对于每组测试用例,输出 $n$ 个数——依次为 $r=1,2,\ldots,n$ 时的答案。
输入输出样例
输入 #1
3 5 1 3 2 1 2 1 2 2 3 3 4 3 5 7 1 2 3 1 3 2 1 1 2 2 3 3 4 4 5 4 6 3 7 5 5 4 3 2 1 1 2 2 3 3 4 4 5
输出 #1
18 10 5 0 0 40 28 18 8 0 0 0 20 10 4 1 0
在第一个测试用例中,对于 $r = 1$,最优方案是选择 $u = 5$,$v = 4$。此时树的代价为 $1\cdot 0 + 3\cdot 1+2\cdot 2+1\cdot 3+2\cdot 4=18$。可以证明,所有合法操作中无法获得更大的代价。
例如对于 $r = 4$,只有一个节点在该子树中,不存在可进行的操作。此时子树的唯一代价为 $0$。
例如对于 $r = 4$,只有一个节点在该子树中,不存在可进行的操作。此时子树的唯一代价为 $0$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?