最大流最小割(概念)

来源:互联网 发布:linux有什么用途 编辑:程序博客网 时间:2024/06/16 03:53

最大流和最小割

先前学习了最大流,那么,这个最小割是怎么又跟最大流联系在了一起呢?

先来理一下割的有关概念和定量

1.割的定义:

割(CUT)是网络中顶点的一个划分。它把顶点分成两个集合:S和T。其中,源点s属于S,汇点t属于T。记作CUT(S,T)


如图,源点s = 1,汇点t = 5。棕色的数字代表容量。

例如,

1  )顶点集合S={1,2,3}和T={4,5}构成一个割。



2  ) 顶点集合S={1,3}和T={2,4,5}构成一个割。


3  ) 顶点集合S={1,3,5}和T={2,4}不能构成一个割。


因为s=1和t=5处在了同一个集合S。

2.割边

如果一条弧的两个顶点分别属于顶点集S和T(即一个顶点在S,另一个顶点在T),那么这条弧称为割CUT(S和T)的一条割边

从S指向T的割边是正向割边

从T指向S的割边是逆向割边

例如  顶点集合S={1,3}和T={2,4,5}构成的一个割,其中,正向割边:1->2, 3->5 逆向割边:2->3

割CUT(S,T)中所有正向割边的容量和称为割CUT(S,T)的容量。

例如,1 )中的割CUT的容量为 3+4=7。

2 )中割CUT的容量为 4+4=8

3.网络流与割的关系

定理1:如果f是网络中的一个流,CUT(S,T)是任意一个割,那么f的值等于正向割边的流量与负向割边的流量之差。

推论:1.如果f是网络中的一个流,CUT(S,T)是一个割,那么f的值不超过割CUT(S,T)的容量;2.网络中的最大流不超过任何割的容量。

定理2:在任何网络中,如果f是一个流,CUT(S,T)是一个割,且f的值等于割CUT(S,T)的容量,那么f是一个最大流,CUT(S,T)是一个最小割(容量最小的割)。

定理3:在任何网络中,最大流的值等于最小割的容量。


最大流=7,最小割=7。

结论:最大流时,最小割CUT(S,T)中,正向割边的流量=容量,逆向割边的流量为0,否否则还可以增广。

问题:如何求集合S

答:数组pre[i]记录增广路径上节点i的前驱节点。初始值pre[i]=-1b[1]=0;假设1是源点。

那么,如果pre[i] > 1, 说明i有前驱,是能从源点1找到的点,那么i属于S

0 0
原创粉丝点击