wqs 二分学习笔记

蒟蒻的第一篇学习笔记qwq

wqs二分用于解决此类问题

n个物品,从中选恰好m个,最大化收益。而且你发现,如果没有选m个的限制,这道题是非常好做的。

使用前提

1、恰好选k个,至多至少不行
2、答案满足凸性

什么是凸性?

设选i个物品时的收益为fi
如果把它画成函数,那么它长这样(上凸包)

或者这样(下凸包)

也就是说,每选一个点所额外获得的收益(即fi - fi-1, 在图中表现为斜率)单调递减(或递增)

于是,我们可以二分这个斜率,并快速求出这条线在凸包上的切点会在哪里。

下面是我个人认为比较难理解的地方,以上凸包为例讲解
我们现在已知一个斜率k,那么看图,我们得到 kx + b = f(x), b = f(x) - kx
一般题目中这个b是很好求的(详见后文例题),它表示在这种条件下,若没有取k个的限制,最优解是多少,即“无限制最优”。(因为我们注意到此时b是最高的一个截距)
而且一般此时可以知道x的值,即“取了多少个”。根据它来check此时的mid是否合法
那么我们就可以很轻松地求出f(x)

最后注意一个细节,求最终答案的时候是f(x) = ans * m + b,目的是防止这样的情况出现。

感性理解

就是给受到题目限制的特殊点加一个权值,通过增大或减小权值来使得取到的特殊点个数变多或者变少
那么我们就可以通过二分来确定这个过程,最后通过mid和m求出答案即可

和费用流的关系

这是稍进阶一点的,一般模拟费用流会用到。
考虑在费用流中,我们用spfa求增广路,每次找到的都是费用最小的路径,也就是说,我们每次找到的最短路费用单调不降。
既然增量单调不降低,那么总费用就是一个下凸包,可以使用wqs二分求解

例题:

就不写题解了,毕竟题解区写的很详细了

Tree I

最小度限制生成树

Raper 去看樱雪喵的题解qwq

posted @ 2024-08-23 11:47  Nihachu  阅读(23)  评论(1编辑  收藏  举报