预备概念:
网络的割 如果去掉某弧集s中的所有弧以后源点s和汇点t不再连通,则把弧集s称为网络的s-t割。割的容量为其中所有弧的容量之和。去掉割以后s所在的连通分量叫做S集,t所在的连通分量叫做T集。
最小割 显然所有弧的集合就是一个割,它是容量最大的割。我们自然希望得到最小的割,即最小割。
最小割最大流定理 s-t最大流的流值等于s-t最小切割容量。
闭合图 一个有向图的子点集,使其中的点的出边都指回集合中的点,则称此为闭合图。
最大权闭合图 给每个点赋上点权,则权和最大的闭合图,为最大权闭合图。
闭合图的性质恰好反映了事件之间的必要条件的关系:一个事件发生,它需要的所有前提都要发生。
下面通过构图,我们将最大权闭合图问题转化成最小割问题,即最大流问题求解。
定义W[I]代表顶点I的权值,新增源点S,汇点T。
1、若W[I]>0,则S向I连一条容量为W[I]的边。
2、若W[I]<0,则I向T连一条容量为-W[I]的边。
3、原图中的边,容量设置为正无穷。
这样,最小割就对应了最大权闭合图,而总盈利-最大流就是权和。
定义一个割划分出的S集合为一个解,那么割集的容量之和就是(未被选的A集合中的顶点的权值 + 被选的B集合中的顶点的权值),记为Cut。A集合中所有顶点的权值之和记为Total,那么Total - Cut就是(被选的A集合中的顶点的权值 - 被选的B集合中的顶点的权值),即为我们的目标函数,记为A。要想最大化目标函数A,就要尽可能使Cut小,Total是固定值,所以目标函数A取得最大值的时候,Cut最小,即为最小割。