前言:
在APIO 2018 Day2下午听wuvin讲二分,听了一上午的神仙,现在终于有可以听懂了。
专题:
-
平均边权最大
-
题解 by wuvin:
二分平均值
然后每条边减去平均值
变为查找是否存在正环可以使用SPFA(反着写松弛)
-
最大闭合权子图变式
-
题意:
一个N个点M条边的图(不一定连通)。
一个子图的优美程度定义为子图中的边数/子图的点数
现在你需要求出最大能得到的优美程度是多少?
-
题解by wuvin:
照套路我们二分一下
然后点带负权,边带正权
选择边必须选择点
变成最大权闭合子图,上网络流解决
然而我并不会网络流求这个...
-
-
带权二分系列
-
BZOJ 2654
-
题解by wuvin:
如果我们对所有白色边的边权增加(M*maxW),那么最小生成树会得到一个白色边尽量少的方案。
如果我们对所有白色边的边权增加(-M*maxW),那么最小生成树会得到一个白色边尽量多的方案。
我们定义这个给白色边的额外权值为C。随着C从小到大遍历([-M imes maxW,M imes maxW]),那么我们的最优方案中的白色边会逐渐减少。
如果某个C下,我们最优方案刚好得到K条边,那么这就是原题的最优解。因为最终代价为 原题的最优解+(C*K) 其中K和C都是常数,所以说最优解和原题是同一个最优解。
所以我们可以二分C值,然后使用(kruskal)生成树即可。(假设白色边和黑色代价一样的时候选择白色边)
但是注意一个细节,随着C的增加,白色边边数只是单调不增而已,可能出现C=1是得到5条白色边,C=1+eps是就是3条白色边,这是因为可能存在可以代替白色边的权值刚好之比白色边大1的黑色边。
所以二分到最后需要特判一下。
-
APIO 2014
-
题解by wuvin:
Ans = C – 每一段内任意两个数的两两的乘积之和
(Ans=C-minimize(sum_{i in [li,ri]}sum_{j in [li,ri]} {Wi imes Wj}))
传统做法O(NK)的斜率DP
我们来参数二分 —— 给每次划分附上一个额外的代价C。
当(C= +∞)时,答案是只分一段。
当(C=0)时,答案是每个数割一刀,分成n段。分的段数随着C的增长而减少
于是可以采用刚刚类似的二分方法。二分之后就是正常的斜率DP了。
最终复杂度 (O(nlogV)) -
相似:
SDOI2016 征途
-