清橙OJ A1212. 剪枝

来源:互联网 发布:软件人才外包公司 编辑:程序博客网 时间:2024/06/11 02:05

题目意思可以转换成:选择一些点,去掉它所有孩子使其成为叶子节点,求树的最小价值。

用DFS从左到右扫一遍整棵树。每个点记录一个DP值,即当这个点是最右的叶子节点时树的最大价值。

用如图方式转移:

维护一条链a(红色),是所有以访问到的最右的节点的集合。一条链b(绿色),是dfs新找到的节点,从分支点一直到叶子节点。b上的点除第一个以外,都是其父亲的第一个儿子。

用橙色的点去更新绿色的节点。橙色的点是a链上深度不小于绿色第一个点的点。

用均摊O(n)的时间更新绿色点dp值,最后删去橙色点,把绿色点加入到链a中去。

答案就是最右的一条链的最大dp值。

具体细节见代码


0 0
原创粉丝点击