SelectEdges

[ABC259F] Select Edges

树形 DP+贪心。

拟定 1 为根。

首先考虑状态 f[i][0/1] 表示以 i 为根的子树内的答案,它的父节点到它的边没选/选,注意这里状态中没有考虑父节点到它的边的边权

然后可以先将所有 i 的子节点 v 累加,即 f[i][0]=f[v][0]。如果 d[i]=0,令 f[i][1]=inf

接下来就是剩余的边怎么选择了。我们可以记选择边 w 的贡献为 w+f[v][1]f[v][0](因为你上面已经累加了 f[v][0])。然后发现是可以贪心的,直接累加最大的几个数即可,如果是 f[v][1],那么就减少一个。这里可以用快速选择算法使得复杂度降到 O(n)

自己写的快速选择算法似乎和 STL 差不多。。。那以后尽量用 STL,而且听说 STL 不会被卡成 O(n2)

AC

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17520881.html

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

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