[LOJ 2462][2018 集训队互测 Day 1]完美的集合
完美的集合
题解
生平最讨厌的卡常。
其实这道题蛮好想的。
由题可知,如果一个集合能用,它一定是一个联通块而且总重量小于m。很明显的dp了,数据范围也不大。
我们可以先以每个节点为根,都做一次dp。
不过我们马上发现,时间复杂度是,明显要超时。那我们应该怎么做呢?
我们可以采取dfs序dp。因为我们只需求出每个根的dp值,那么其它点的dp值我们都是可以不管的,也就是它是什么值都无所谓。那么我们就将每个点的子树大小记录下来,对于一个点,如果它的dfs序为i,那么到
属于它的子树。而它的dfs序减去它父亲下一个儿子的子树大小就是他父亲下一个儿子的dfs序。如此我们就可以将上一个儿子的dp值与下一个儿子的dp值放在一起,一直更新到它的祖先。
我们这样就可以在

浙公网安备 33010602011771号