引入
例题https://www.luogu.org/problem/show?pid=2762,这是一道求最大权问题,相似的问题有很多,下面就以这道题为例,探究这样的题的做法。
题意
题目中有“实验”,做实验有一定的收益ai。做实验需要实验器材,花费为bi。求最大收益。
求解
1、转化
因为每个a都要有几个b与他相连,那么我们可以连成边。连边建图。然后呢就形成了一个闭合图。
这里引入闭合图的概念:在一个图中,我们选取一些点构成集合,这个集合记为V,且集合中的出边,所指向的终点也在V中,则我们称V为闭合图。通俗一点,就是这个集合V的点,只向V的内部的点连边。
最大权闭合图:在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。即:权值之和最大的闭合子图。
根据定义:那么我们也就是求最大权闭合图。(这一点要理解好)
下面就是一个闭合图,仔细看一下,确实是满足上述性质。但是这不是权值最大的闭合图。
这图中闭合图还有{5}、{2,5}、{4,5}、{2,4,5}、{3,4,5}、{1,2,3,4,5}、{1,2,4,5}
最大权闭合图为{3,4,5}。
2、求解
然后我门将要在闭合子图中求解。
构造网络图:构造一个源点S,汇点T。我们将S与所有权值为正的点连一条容量为其权值的边,将所有权值为负的点与T连一条容量为其权值的绝对值的边,原来其他的边将其容量定为正无穷。
先说一下结论:最大权闭合子图的权值等于所有正权点之和减去最小割。
即在图上求出最小割。
下面证明。
1.最小割一定是简单割
简单割指得是:割集的每条边都与S或T关联。即任意一条割集中的边(u,v),一定是 u=S或者v=T。
证明:因为在图中所有不是不与S或者T相连的边都是正无穷,有正无穷的割一定不是最小割,所以最小割是简单割。
2.简单割一定和一个闭合子图对应
闭合子图V和源点S构成N集,其余点和汇点T构成M集。
首先证明闭合子图是简单割:若闭合子图对应的割不是简单割,则存在一条边(u,v),u∈N,v∈M,且c(u,v)=∞。说明(u,v)这条边的终点不在集合V中,也就不是闭合图,产生矛盾。
然后证明简单割是闭合子图:对于V中任意一个点u,u∈N。u的任意一条出边c(u,v)=∞,不会在简单割的割边集中(割边只有(s,v)(u,T)这样的边),因此v不属于T,v∈S。所以V的所有点均在S中,因此N-是闭合子图。
重点:证明最大权闭合子图的权值等于所有正权点之和减去最小割。
根据上面的结论,等量代换一下,最小割=简单割,简单割=闭合子图,所以:闭合子图=最小割。最小割也对应了一个闭合图。
然后证明最小割就是最大权的闭合子图。
集合N表示为S所在的集合,M表示为T所在的集合。
首先一个割的容量C = M中所有正权点的权值之和 + N中所有负权点的权值绝对值之和。(x1+y1)(解释一下,S与所有权值为正的点连边,T与所有权值为负的点连边,所以:M中正权点的权值之和,就是割边,同理N中所有负权点的权值绝对值之和也还是割边)
闭合子图的权值和W = N中所有正权点的权值之和 - N中所有负权点的权值绝对值之和。(x2-y2))(解释一下:加一个负数相当于减去这个数的绝对值)
然后y1=y2(都是一样的)
所以x1+x2=W+C
x1+x2就是整张图中所有正权值点的权值之和(上面的字)。
x1+x2可以输入时就求出来,设x1+x2 = tot
那么tot=W+C
W = tot - C;
要求最大权闭合图,使权值最大,tot又是定值,所以让C最小就好了,求最小割(最大流)就行了,到这里,最大权闭合子图的权值就转化成了求最小割的问题。
题解
建图:实验是正权值的点(有获益),器材是负权值的的点(建造需要成本),每个人有两个所属的中转站,实验和器材之间有边。
这样就形成了一个闭合图,然后按上面的做就行了。
代码戳这http://www.cnblogs.com/mjtcn/p/7358314.html
补充
求最小割的意义。
对于原题,我们可以见下面一张图。
求最小割其实就是求最少的花费,设sum是所有实验的带来的收益和,那么sum把所有的收益加起来了,减去最小花费就是最大获益了,这就是为什么求最小割了。
所以:最小割是花费,要让花费尽量小。
那么求最小割了,设最小割是mincut花费,随后要用sum-mincut:
- 首先中间的是一定不能切的,切一条绿边的花费就是正无穷了!!!
- 切右边的橙色的边表示:所有与这个相关的实验的收益不要了
- 切左边的蓝边:与这个相关的器材买,收益要(mincut+器材的价格,然后sum再减去,减去成本)
总结
推荐:胡伯涛 《最小割模型在信息学竞赛中的应用》