ABC333D 题解

第一次打 atcoder - ABC 的比赛。at 题是真的不错。

如果运气好的话,这篇题解可能也是我第一篇过审的题解。

Solution

题目来源:ABC333D (访问洛谷 | 访问 atcoder)。

题意:

给你一棵有 n 个结点的无根树,你可以花费 1 的代价,删除一个叶子结点和其所连边(叶子结点指所连边数为 1 的结点)。求删除 1 号结点所需要的最小代价。n3×105


显然我们要删去结点 1,首先得让结点 1 是叶子结点。而叶子结点的定义是「所连边数为 1 的结点」,也就是说,我们要让结点 1 的所连边数为 1

不妨将结点 1 看作根结点,这样,我们要通过删除操作,让根结点只剩下一颗子树,这个时候就可以把结点 1 删去了。保留哪颗子树呢?若我们要让删除的子树结点数最小,那么需要让保留的子树结点最大。

那么我们只需从结点 1 开始 dfs 求出以 1 为根的、以 i 为父结点的子树结点数 vali,删除的结点数就是结点 1 所有子树结点数之和减去结点 1 的最大子树结点数。于是就做完了。记得把结点 1 也删去,答案加上 1

Code

本文作者:Running-a-way

本文链接:https://www.cnblogs.com/Running-a-way/p/18150534

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Running_a_way  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起