网络流算法讲座材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络流常用算法:
1.Fort_Fulkerson算法.
2.Edmonds_Karp算法(最短增广路算法).-------------------O( n*m^2 )
3.SAP算法(使用距离标号的最短增广路算法).--------------O( n^2*m )
4.Dinic算法.------------------------------------------O( n^2*m )
5.Push_Relabel算法(预流推进算法).---------------------O( n^2*m )
6.FIFO Preflow_Push算法.-------------------------------O( n^2*m)
7.Relabel_to_Front算法.--------------------------------O( n^3 )
8.Highest Label Preflow_push算法.----------------------O( n^2*m^1/2)
网络流算法讲座材料
1 概念与性质
网络N是指具有以下结构的有向图D,D中有两个称为源和汇的不同顶点s, t,在D的弧集E上定义了非负整数值函数c。
网络N的流是定义在弧集E上的整数值函数,满足对任意边a,
0<=f(a)<=c(a),且对任意顶点,入流量等于出流量。
性质1:任何st-流都具有如下性质:从s的出流量等于到t的入流量。
性质2:任何st-流都有一个最大流,它可以表示为从s到t,至多E条有向路径集合上的流。
图的切割是将顶点分成两个独立的集合,交叉边是一条连通两个集合中顶点的边,交叉边的集合叫做切割集合。
网络N的st-切割是这样的一个切割,它将源s放到一个集合,将汇t放到另一个集合。与st-切割对应的每条交叉边或者是st-边(从集合s指向集合t),或者是ts-边(从集合t指向集合s),st-切割的容量是st-边的容量之和,st-切割的流量等于st-边上的流量和与ts-边上的流量和之差。
性质3:网络中所有st-流的最大值等于所有st-切割的最小容量。
残余网络
边费用是定义在边集E上的整数值函数h。流的费用是该流的所有边的流值与边费用乘积的总和。
最小费用最大流是费用最小的最大流。
性质4:当且仅当残余网络不包含负开销的有向环时,最大流才是一个最小费用流。
2 最大流应用
2.1 一般网络的最大流
描述:给定一个含多个源和多个汇的网络,找出其中的最大流。
解法:在原网络的基础上,增加一个虚源s和一个虚汇t。若原网络有p个源s1, s2, …, sp和q个汇t1, t2, …, tq,则在原网络中增加p条以s为起
点的边(s,s1), (s,s2), …, (s,sp),以及q条以t为终点的边(t1,t),
(t2,t), …, (tq,t),新增各边的容量分别定义为各源si的流出量和各汇t的流入量。新网络的s-t最大流与原网络的最大流等价。
例题:HOJ 1229, Power Network
2.2 顶点容量约束的最大流问题
描述:给定一个某些顶点存在容量约束的流网络,找出其最大流。
解法:在原网络的基础上,将具有顶点容量约束的顶点u拆成两个顶点u, u*, 原顶点u 的入边仍为u的入边,原顶点u的出边改为u*的出边,增加一条边(u, u*),其边容量为原顶点u的顶点容量。新网络的s-t最大流与原网络的最大流等价。
例题:
2.3 可行流问题
描述:在一个流网络中给每个顶点分配权重,如果为正值,可以解释为供给,如果为负值,可以解释成需求,顶点权重的总和等于0。如果每个顶点的出流和入流差等于该顶点的权重(如果为正,则为供给,如果为负,则为需求),定义此流为可行流。已知这样一个网络,判断是否存在一个可行流。
解法:已知一个可行流问题,构建一个具有相同顶点和边,但顶点上不带权重的网络。添加一个源s和一个汇t,s有一条边到达每个供给顶点,其边容量等于该顶点的供给,t有一条边从需求顶点出发,其边容量等于该顶点的需求。当且仅当新网络的s-t最大流为满流时(充满从源s出发的所有边及到达汇t的所有边),原网络才有一个可行流。
例题:
2.4 带下界约束的最大流问题
描述:求边有容量下限的网络的最大流。
解法:设边(u, v)的容量上下限分别为c, l,再添加一个源s'和汇t',将(u, v)的下限去掉,上限改为c-l,增加两条边(u, t'),(s', v),容量均为l。这样,将原网络带下限约束的最大流转换为双源点无容量下限的最大流。
例题:
2.5 循环流问题
描述:考虑无源也无汇的网络,设N是具有基础有向图D=(V,A)的网络,l 和c是定义在A上的非负整数值且对任意边a,l(a)<=c(a),分别称l和c为下容量函数和上容量函数。如果定义在A上的函数f满足:
f(v, V) - f(V, v) = 0, V中任意顶点v
l(a) <= f(a) <= c(a)
则称f为网络N的循环流。
对一般的网络N,循环流未必存在。给一个这样的网络,判断循环流是否存在。
解法:添加一个源s和汇t,对于每个下限容量l不为0的边(u, v),将其下限去掉,上限改为c-l,增加两条边(u, t),(s, v),容量均为c。这样,原网络存在循环流等价于新s-t网络的最大流是满流。
例题:
2.6 带下界约束的最小流问题
2.7 二分图的最大匹配
描述:利用最大流求一个二分图的最大匹配。
解法:已知一个二分图匹配问题,让所有的边从一个集合U指向另一个集合T,再添加一个源s和一个汇t,s有一条边指向U中所有顶点的边,t有一条边从T中所有顶点指向它自身,最后给图中所有边分配容量1。新s-t网络中的最大流对应于原二分图的一个最大匹配。
例题:
2.8 图的连通性问题
HOJ 1646,Cable TV Network
3 最小费用流应用
3.1 运输问题
描述:公司有工厂和零售部门,工厂生产的商品必须通过一定的运输渠道到达零售部门进行销售。不同的运输渠道具有不同的容量和单位开销。问是否可以从工厂配送商品到零售问题,使得供应满足每个地方的需求,并找出这样做的最低开销途径。
解法:转化为多源多汇的最小费用最大流问题。
例题:PKU 2516, Minimum Cost
3.2 二分图的最小权最大匹配
描述:利用最大流求一个二分图的最大匹配。
解法:已知一个二分图匹配问题,让所有的边从一个集合U指向另一个集合T,再添加一个源s和一个汇t,s有一条边指向U中所有顶点的边,t有一条边从T中所有顶点指向它自身,最后给图中所有边分配容量1。新s-t网络中的最大流对应于原二分图的一个最大匹配。
例题:HOJ 2025, Going Home