首页 > 其他分享 >SelectEdges

SelectEdges

时间:2023-07-02 16:13:36浏览次数:40  
标签:STL 累加 为根 SelectEdges 节点 贪心

[ABC259F] Select Edges

树形 DP+贪心。

拟定 \(1\) 为根。

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

然后可以先将所有 \(i\) 的子节点 \(v\) 累加,即 \(f[i][0]=\sum 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(n^2)\)。

AC

标签:STL,累加,为根,SelectEdges,节点,贪心
From: https://www.cnblogs.com/wscqwq/p/17520881.html

相关文章