CF1119F

题意

洛谷

做法

考虑暴力,单独考虑一个度数限制\(d\)
\(f_{i,0/1}\)\(i\)子树全部满足限制,\((fa_i,i)\)是否被割断的最小值
若不考虑\(u\)这个点的度数限制,\(f_{u,0/1}=\sum\limits_{v\in son_u}min(f_{v,0},f_{v,1}+(u,v).w)\)
再考虑进\(u\)这个点,若\(f_{v,1}+(u,v).w\le f_{v,0}\)显然会选择割断,令\(cnt_u\)为这样的个数
\(deg_u-cnt_u\le d\)则无需操作
\(deg_u-cnt_u>d\),则还需要选择\(deg_u-cnt_u-d\)个点割掉,可以对差值\(f_{v,1}+(u,v).w-f_{v,0}\)建堆,最后留在堆中的,为需要割断的边

考虑优化这个暴力,若枚举\(d=1\sim n-1\)
对于\(deg_u\le d\),可以从这个图中移去,顺便将\((u,v).w\)加入点\(v\)的堆中,以示割掉这条边为限制度数
对于一个点,需要割断的边数是递减的,堆内虚边的数量若大于其,则永久弹出一些
则每次从堆内弹出的次数与实边的数量相关
这样做的复杂度为\(O(nlogn)\)

posted @ 2020-05-20 20:13  Grice  阅读(171)  评论(0编辑  收藏  举报