最大流-最小割定理的运用
Edmonds-karp算法

1. 最大流最小割定理介绍:把一个流网络的顶点集划分成两个集合S和T,使得源点s ∈S且汇点t ∈T,割(S,T)的容量C(S,T) =∑Cuv, 其中u∈S且v∈T。
从直观上看,截集(S,T)是从源点s到汇点t的必经之路,如果该路堵塞则流从s无法到达t。
于是我们可以得到下面的定理:最大流最小割定理:任意一个流网络的最大流量等于该网络的最小的割的容量。
这个定理的证明这里就不给出了,可以参考图论方面的资料。
2. 求最大流的Edmonds-Karp算法简介:若给定一个可行流F=(Fij),我们把网络中使Fij=Cij的弧称为饱和弧,Fij<Cij的弧称为未饱和弧。
如果流网络中从i到j没有弧,我们添加一条从i到j且容量Cij=0的弧,这样整个流网络变成一个完全图。
如果从i到j有流量Fij,则从j到i的流量定义为Fji = -Fij 。
考虑一条从源点s出发到汇点t的路径p,如果对于每一段弧(i,j)属于p都有Fij < Cij,即每一条属于p的弧都是未饱和弧,则我们可以向这条路径上压入更多的流,使得其中的一条弧达到饱和。
这样的路径p叫做可改进路,可压入的流量叫做该可改进路的可改进流量。
重复这个过程,直到整个网络找不到一条可改进路,显然这时候网络的流量达到最大。
Edmonds-Karp算法就是利用宽度优先不断地找一条从s到t的可改进路,然后改进流量,一直到找不到可改进路为止。
由于用宽度优先,每次找到的可改进路是最短的可改进路,通过分析可以知道其复杂度为O(VE2)。
Edmonds-Karp算法的伪代码如下:设队列Q--存储当前未检查的标号点,队首节点出队后,成为已检查的标点;path -- 存储当前已标号可改进路经;repeatpath置空;源点s标号并进入path和Q;while Q非空and 汇点t未标号dobegin移出Q的队首顶点u;for 每一条从u出发的弧(u,v) doif v未标号and 弧(u,v)的流量可改进then v进入队列Q和path;end whileif 汇点已标号then 从汇点出发沿着path修正可改进路的流量;until 汇点未标号;Edmonds-Karp算法有一个很重要的性质:当汇点未标号而导致算法结束的时候,那些已经标号的节点构成集合S,未标号的节点构成集合T,割(S,T)恰好是该流网络的最小割;且这样求出的最小割(S,T)中集合S的元素数目一定是最少的。
834 最大流最小割定理

最大流最小割定理Max-flow Min-cut Theorem在网络 G =(V , E , s , t , c ) 中,任何一个满足 s ∈S ,t ∈T =V -S 的顶点 V 的划分 {S , T } 称作一个 s -t 割(s -t cut ),简称割(cut )一个 s -t 割的容量(capacity )定义为 , 记为 cap (S , T )如果图 G 的 s -t 割 (S , T ) 使得任意一个 G 的s -t 割 (S ’, T ’) 都有 cap ( S , T )≤cap (S ’, T ’),则称 ( S , T ) 是图 G 的一个最小s -t 割,简称最小割(minimum cut ) (),,uv u S v Tu v E c ∈∈∈∑sabcdeft 15530151081596 1010101544sabcdeft 15530151081596 1010101544sabcdeft 15530151081596 1010101544一般而言,网络的最小 s -t 割不唯一sabt1111sab t1111sabt1111下面建立流与割之间的关系,首先引入一些符号的定义在网络 G =(V , E , s , t , c ) 中,假设 A , B 都是 V 的非空子集,定义,即从 A 穿出进入 B 的边的总流量,即从 A 穿出进入 B 的边的总容量()(),,,uvu A v Bu v Ef A B f ∈∈∈=∑()(),,,uvu A v Bu v Ec A B c ∈∈∈=∑T ’S ’T S 定理1假设 G =(V , E , s , t , c ) 是一个网络,令 f 是一个流,(S , T ) 是一个 s -t 割,则通过该割的流量等于由源 s 发出的流量。
即 f (S , T ) - f (T , S ) = | f | 。
特别地有 f (∙, t )=| f |证明(大意) 对 |S | 进行归纳证明。
图论中的网络流与最大流最小割定理

图论是离散数学中研究图的性质和关系的一个重要分支,而网络流与最大流最小割定理则是图论中非常重要的概念和定理之一。
本文将介绍什么是网络流,以及网络流与最大流最小割定理的理论和应用。
什么是网络流?网络流是一种图论中独特的概念,它描述了一个图中的物体(例如液体、汽车等)在路径之间的流动。
其中,图的每条边都有一个容量的限制,表示这条边能够传输的最大流量。
网络流问题就是要在给定的图中找到从源点到汇点的最大流量。
例如,考虑一张图,其中有源点S和汇点T,图中的边表示物体传输的路径,边上的数字表示该边的容量。
我们的目标是找到从源点到汇点的最大流量。
在这个问题中,我们需要根据每条边的容量限制,找到一条路径从源点S到汇点T,并计算出经过该路径的最大流量。
然后,我们将这个最大流量转移到其他路径上,然后再找到从源点到汇点的最大流量。
最终,我们能够找到图中从源点到汇点的最大流量。
那么,如何确定最大流量呢?这就引入了网络流与最大流最小割定理。
最大流最小割定理是图论中一个基本而强大的定理,它指出了最大流与最小割之间的关系。
最小割是图中将图分成两部分的边的集合,这样将源点和汇点划分到不同的部分中。
割的容量定义为割中所有边的容量之和。
最大流最小割定理的核心内容是:在一个图中的最大流等于该图中的最小割。
这一定理的证明非常有趣。
首先,我们假设已经存在一个最大流,并找到了对应的最小割。
那么,我们可以证明这个最小割的容量与最大流的流量相等。
其次,我们还可以证明,如果找到了一个最小割,并计算出割的容量,那么图中的一个最大流就是这个割的容量。
这个定理不仅在图论中具有重要的理论意义,而且在实际应用中也有着广泛的应用。
例如,在交通规划领域中,可以将道路网络描述为一个图,并通过最大流最小割定理计算出最大的交通流量。
此外,该定理还在电路设计、流水线优化等领域有着重要的应用。
总之,网络流与最大流最小割定理是图论中的重要概念和定理。
网络流问题描述了图中物体在路径之间的流动,而最大流最小割定理则指出最大流与割的容量之间存在着严格的关系。
最小割定理

最小割定理
欧拉的最小割定理是一个定理,它解释了如何将一个图中的边按一定的方式分割成相互单独的子图,这些子图没有共有的边或顶点,同时满足了每条被分割的边尽可能少,这种费用最小的分割称为最小割 (mincut)。
欧拉最小割定理是由著名的欧拉于1835年提出的,他定理说:任意一个连通图中,必有顶点关联度为2的顶点,即每一个简单图中必有至少两个度数为2的顶点。
这个定理表达了一个抽象的观点,直观地理解就是可以以最小的代价分割一张图,使得其分割出的两个不相交的子图都是连通的。
欧拉最小割定理被用于解决许多有关图论理论,例如最短路径问题,最小生成树问题,最大流量问题等。
这个定理也被广泛应用在存储系统,网络传输等多个领域中,为其设计了许多的求解算法,因此得以广泛利用。
欧拉的最小割定理是一个特殊而重要的定理,它解决了许多重要的图论问题,由于其巨大的实用价值,在实际的应用开发中得到广泛的应用,如网络传输,数据存储等。
浅析最大最小定理在信息学竞赛中的应用

特点
题目中给出的是一个平面图 图中的一个点为源点s,另外一个点为汇点t, 且s和t都在图中的无界面的边界上 我们称这样的平面图为s-t平面图 平面图
平面图的性质
平面图性质
1. (欧拉公式)如果一个连通的平面图有n个点, m条边和f个面,那么f=m-n+2 2. 每个平面图G都有一个与其对偶的平面图G*
对偶图举例
2 2* 3* 3 5 4
1
1*
4* 6
平面图与其对偶图的关系
平面图G与其对偶图G*之间存在怎样的关 系呢?
G的面数等于G*的点数,G*的点数等于G的面 数,G与G*边数相同 G*中的环对应G中的割一一对应
2 1 1* 3 4* 6 2* 3* 5 4
s-t平面图上最大流的快速求法
G*中的每个点对应G中的一个面
对偶图举例
2 2* 3* 3 5 4
1
1*
4* 6
平面图的性质
平面图性质
1. (欧拉公式)如果一个连通的平面图有n个点, m条边和f个面,那么f=m-n+2 2. 每个平面图G都有一个与其对偶的平面图G*
G*中的每个点对应G中的一个面 对于G中的每条边e
e属于两个面f1、f2,加入边(f1*, f2*)
max z = c x A x ≤ b s.t. x≥0
整数线性规划
最大最小定理和线性规划
对偶问题
max z = c x A x ≤ b s.t. x≥0
min w = y b yT A ≥ c s.t. y≥0
最大最小定理和线性规划
基本性质
弱对偶性
如果x是原问题的可行解,y是其对偶问题的可行解, 则恒有c*x ≤ b*y
Knig定理 nig定理
最大流算法解决最小割问题及网络流问题

最大流算法解决最小割问题及网络流问题最大流算法(maximum flow algorithm)是解决网络流问题的一种常用方法。
网络流问题是指在一个有向图中,每条边都有一个容量限制,要求在源点和汇点之间找到一条路径,使得路径上每条边的流量都不超过其容量限制,同时保证从源点流出的总流量最大。
最小割问题(minimum cut problem)是网络流问题的一个相关概念。
在一个有向图中,边上的容量表示其最大流量限制,我们需要找到一条割(cut),将图分为两个部分,并使得割的容量最小。
割的容量是指割中每条边的容量之和。
最大流算法可以解决最小割问题。
常用的最大流算法包括Ford-Fulkerson算法和Edmonds-Karp算法。
Ford-Fulkerson算法是一种经典的最大流算法。
它通过不断寻找增广路径来更新流的值,直到无法找到增广路径为止。
增广路径是一条从源点到汇点的路径,其上每条边的剩余容量都大于0,并且路径上的流量不超过容量限制。
Edmonds-Karp算法是基于Ford-Fulkerson算法的一种优化方法。
它使用广度优先搜索(BFS)来寻找增广路径,可以保证在每次寻找增广路径时更新的流量最小。
最大流算法的应用非常广泛。
例如,可以使用最大流算法来优化交通流量,解决作业分配问题,以及在计算机网络中进行路由和流量控制等。
总结起来,最大流算法是解决最小割问题和网络流问题的一种常用方法。
通过寻找增广路径来更新流的值,最大流算法可以在保证路径上每条边的流量不超过容量限制的前提下,使得从源点流出的总流量最大化。
图论中的网络流与最大流最小割定理
网络流是图论中的一个重要概念,在许多实际问题中具有广泛的应用。
在网络中,可以将流量看作是物质的流动,通过研究网络中的流量分布和最大流量限制,可以帮助解决一些实际问题,如最优路径选择、网络优化等。
网络流问题的求解需要使用到最大流最小割定理。
最大流问题是指在一个有向图中,有两个特殊的节点源点S和汇点T,每条边都有一个最大流量的限制,求解从源点S到汇点T的最大流量。
而最小割问题,则是指将网络分成两个部分:一个包含源点S,另一个包含汇点T。
最小割是指将这两个部分之间的边的总流量最小的一个割。
最大流最小割定理指出了最大流和最小割之间的关系。
该定理的主要内容是:一个网络中的最大流等于网络中的最小割。
最大流最小割定理实际上是基于边流的守恒原理,在一个图中,流量的增加必然导致某些边的流量减少,而减少的边必然是横跨最小割的边。
最大流最小割定理不仅仅只是对于图的求解有重要意义,对于许多实际问题的建模也具有指导意义。
以网络中的物质流动为例,最大流最小割定理可以帮助我们找到流量的瓶颈,从而确定如何增加流量的方法。
另外,最大流最小割定理也可以应用于电力网络、通信网络等领域,帮助我们解决一些优化问题。
在实际问题中,求解最大流最小割问题可以使用多种算法。
其中,最著名的算法是Ford-Fulkerson算法。
该算法通过不断调整流量,使得源点到汇点的流量逐渐增大,直到无法再增加为止。
Ford-Fulkerson算法的核心思想是寻找增广路径,即从源点到汇点的一条路径,沿着这条路径增加流量。
最大流最小割定理是图论中的一个重要定理,对于解决网络流问题有着重要的指导意义。
通过该定理,我们可以将网络流问题转化为最大流问题,并通过多种算法求解。
最大流最小割定理在实际问题中有着广泛的应用,帮助我们解决一些优化问题,提高系统的效率。
总之,图论中的网络流与最大流最小割定理为解决网络流问题提供了理论基础,通过寻找最大流和最小割之间的关系,可以有效地解决实际问题。
最大流最小割定理
1
1
2
2 5 t 9 3
最大净收益:(2+5+9) – ( 2+3+4 )= 16 – 最大流 9 = 7
实验仪器和实验的输出: 构造图时要重新编号
6 s 3 2 4 3
仪器:1-3中b[i]=-1的点。
1
1
2
2 5 t 9 3
割边:如果存在弧<i,j>, 满足:i∈S,b[i]>=0, j∈T,b[j]= -1, 那么弧<i,j>是一条割边
净收益=所有实验收入-相应实验方案割的容量
EjT
p C p p C
j k j j Ik T j 1 EjS Ik T m m j 1 EjS Ik T j 1
m
k
pj ( pj Ck ) pj cut ( S , T )
如做实验E2:需要仪器I2 和I3,与t组成集合T。 S与不做的实验E1和没用的 仪器I1组成集合S。 构成割:CUT(S,T) 净收益: E2:25-(6+7)=12 同理 : E1:10-(5+6)= -1 E1+E2:(10+25)-(5+6+7)=17
仪器 5 6 7 I3 I1 I2 实验
∞ ∞
∞ ∞
E1
10 t
S
E2
25
6 s 3 2 4 3
1
1
2
2 5 t 9 3
=(2+5+9)-9-(6+3)=(2+5+9)-(9+6+3)
做实验1:净收益:2-6=-4 =(2+5+9)-(5+9)-6=(2+5+9)-(5+9+6)
最大流问题的几种经典解法综述
最⼤流问题的⼏种经典解法综述⼀、什么是最⼤流问题假设现在有⼀个地下⽔管道⽹络,有m根管道,n个管道交叉点,现在⾃来⽔⼚位于其中⼀个点,向⽹络中输⽔,隔壁⽼王在另外⼀个点接⽔,已知由于管道修建的年代不同,有的管道能承受的⽔流量较⼤,有的较⼩,现在求在⾃来⽔⼚输⼊的⽔不限的情况下,隔壁⽼王能接到的⽔的最⼤值?为解决该问题,可以将输⽔⽹络抽象成⼀个联通的有向图,每根管道是⼀条边,交叉点为⼀个结点,从u流向v的管道能承受的最⼤流量称为容量,设为cap[u][v],⽽该管道实际流过的流量设为flow[u][v],⾃来⽔⼚称为源点s,隔壁⽼王家称为汇点t,则该问题求的是最终流⼊汇点的总流量flow的最⼤值。
⼆、思路分析关于最⼤流问题的解法⼤致分为两类:增⼴路算法和预流推进算法。
增⼴路算法的特点是代码量⼩,适⽤范围⼴,因此⼴受欢迎;⽽预流推进算法代码量⽐较⼤,经常达到200+⾏,但运⾏效率略⾼,如果腹⿊的出题⼈要卡掉⼤多数⼈的code,那么预流推进则成为唯⼀的选择。
( ⊙ o ⊙ )咳咳。
先来看下增⼴路算法:为了便于理解,先引⼊⼀个引理:最⼤流最⼩割定理。
在⼀个连通图中,如果删掉若⼲条边,使图不联通,则称这些边为此图的⼀个割集。
在这些割集中流量和最⼩的⼀个称为最⼩割。
最⼤流最⼩割定理:⼀个图的最⼤流等于最⼩割。
⼤开脑洞⼀下,发现此结论显⽽易见,故略去证明(其实严格的证明反⽽不太好写,但是很容易看出结论是对的,是吧)。
这便是增⼴路算法的理论基础。
在图上从s到t引⼀条路径,给路径输⼊流flow,如果此flow使得该路径上某条边容量饱和,则称此路径为⼀条增⼴路。
增⼴路算法的基本思路是在图中不断找增⼴路并累加在flow中,直到找不到增⼴路为⽌,此时的flow即是最⼤流。
可以看出,此算法其实就是在构造最⼩割。
增⼴路算法⽽预流推进算法的思路⽐较奇葩(没找到⽐较好的图,只能⾃⾏脑补⼀下了。
= =#):先将s相连的边流⾄饱和,这种边饱和的结点称为活动点,将这些活动点加⼊队列,每次从中取出⼀个点u,如果存在⼀个相邻点v是⾮活动点,则顺着边u->v 推流,直到u变为⾮活动点。
平面图最小割
对偶图举例
2 2* 3* 3 5 4
1
1*
4* 6
平面图的性质
• 平面图性质
1. (欧拉公式)如果一个连通的平面图有n个点, m条边和f个面,那么f=m-n+2 2. 每个平面图G都有一个与其对偶的平面图G*
G*中的每个点对应G中的一个面 对于G中的每条边e
e属于两个面f1、f2,加入边(f1*, f2*)
所以
∑c x ≤ ∑b y
j =1 j j i =1 i
n
m
i
最优性的证明
证明
是原问题的最优解, 是其对偶问题的最优解 设x*是原问题的最优解,y*是其对偶问题的最优解 是原问题的最优解
因为 又知 所以
∑c
j =1
n
j
x j ≤ ∑ c j x * j, bi y *i ≤ ∑ bi y i ∑
j =1 i =1 i =1
x是最大流,Q是最小割
复杂度问题
• 只考虑题目中给出的边
需要通过宽搜得到所有的面,且需要处理面与 面之间的关系 思维复杂度与编程复杂度均比较高
• 可以认为原来不存在的边容量为0
不影响答案 面与面之间的关系清晰明了 大大降低思维和编程复杂度
最大最小定理和线性规划
• 线性规划
定义:在满足一些线性等式或者不等式的条件下, 最优化一个线性函数 标准形式:
对偶图举例
2 2* 3* 3 5 4
1
1*
4* 6
平面图与其对偶图的关系
• 平面图G与其对偶图G*之间存在怎样的关 系呢?
G的面数等于G*的点数,G*的点数等于G的面 数,G与G*边数相同 G*中的环对应G中的割一一对应
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【输入:】 第1行有2 个正整数m和n。m是实验数,n是仪器数。接下来的m 行,每行是一个实验的有关数据。第一个数赞助商同意支付该 实验的费用;接着是该实验需要用到的若干仪器的编号。最后 一行的n个数是配置每个仪器的费用。 【输出:】 第1 行是实验编号;第2行是仪器编号;最后一行是净收益。 【样例输入:】 2 3 10 1 2 25 2 3 5 6 7 【样例输出:】 1 2 1 2 3 17
那么j∈S。//否则不是最小割
即从s出发能找到的含有残留的点组成集合S。其余的点 组成集合T。
怎样求集合S? 数组b[i]记录增广路径上结点i的前驱结点。
初始值b[]= -1,b[1]=0;假设1是源点。
如果b[i]〉-1(有前驱,能从源点1找到的点),那么, i∈S。
怎样求正向割边和逆向割边?
水流管道的最大流量由最细的管子容量决定的
二、最大流最小割定量的应用
1、太空飞行计划问题
【问题描述:】 W 教授正在为国家航天中心计划一系列的太空飞行。每次 太空飞行可进行一系列商业性实验而获取利润。现已确定了一 个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验 需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用 到的仪器是I的子集Rj 。配置仪器Ik的费用为ck美元。实验Ej 的赞助商已同意为该实验结果支付pj美元。W教授的任务是找出 一个有效算法,确定在一次太空飞行中要进行哪些实验并因此 而配置哪些仪器才能使太空飞行的净收益最大。这里净收益是 指进行实验所获得的全部收入与配置仪器的全部费用的差额。 对于给定的实验和仪器配置情况,编程找出净收益最大的 试验计划。
3
2 1
1
3
4
2
5 t
2、网络流与割的关系:
网络流量:5
割的流量 1
2
3
割 1
2 3 4
正 6
5 5 5
逆 1
0 0 0
s1
6
4
2
4
33
4
5
3
4
21
1
3
4
2
5t
定理一: 如果f是网络中的一个流,CUT(S,T)是任意一个割,那 么f的值等于正向割边的流量与负向割边的流量之差。 证明: 设X和Y是网络中的两个顶点集合,用f(X,Y)表示从X 中的一个顶点指向Y的一个顶点的所有弧(弧尾在X中,弧 头在Y中:XY)的流量和. 只需证明:f=f(S,T)-f(T,S) 即可。
B
1
A 5 6 7 8 t
S
s
T
2 3 4
构造割cut(S,T),如果i∈T,则i的前驱j∈T。 割对应一种实验方案。 求出最大流f。 最大收益: di f
iA
做实验 2和3
1
1
2
2 5 t 9 3
最大净收益:(2+5+9) – ( 2+3+4 )= 16 – 最大流 9 = 7
实验仪器和实验的输出: 构造图时要重新编号
6 s 3 2 4 3
仪器:1-3中b[i]=-1的点。
1
1
2
2 5 t 9 3
割边:如果存在弧<i,j>, 满足:i∈S,b[i]>=0, j∈T,b[j]= -1, 那么弧<i,j>是一条割边
假设另外的任意割CUT(S1,T1),容量为c1,根据流量 不超过割的容量,所以有c1>=c,故,CUT(S,T)是最小割。
定量3:最大流最小割定量:
在任何的网络中,最大流的值等 于最小割的容量。14来自22 23
2 1
4
5
2 1
最大流:7
2 1
S={1,2,3},T={4,5}
Cut(S,T)是最小割, 容量=3+4=7
净收益=所有实验收入-相应实验方案割的容量
EjT
p C p p C
j k j j Ik T j 1 EjS Ik T m m j 1 EjS Ik T j 1
m
k
pj ( pj Ck ) pj cut ( S , T )
分析: 令di=bi-ai,净收益。 A={i|di>=0}:可以获得利润的项目集合。 B={i|di<0}:亏损的项目集合。 构造网络图: G=(V,E,C)。 1、两类顶点:N+2个点:源点s个汇点t,第i个项目点 vi。 2、三种弧: 如果i∈A,存在弧<i,t>,容量为di。 如果i∈B,存在弧<s,i>,容量法|di|。 如果i个前驱项目为j,存在弧<j,i>,容量为+∞。
构造网络图G如下:
顶点个数:m+n+2 样例如右图: S 构造图时要重新编号 5 6 7 I3 仪器 I1 I2 实验 ∞ ∞ ∞ ∞ E1 E2 10 T 25
分析得出:
任意一种实验方案所做的实验以及所需的仪器以及t构成集 合T,剩下的不做的实验以及不需要的仪器和s构成集合S。 T和S正好对应与图的一个割。
网络流之二
最大流最小割定理
一、割的有关概念和定量
1、割的定义:
割(CUT)是网络中顶点的一个划分,它把网络中的所有顶点划分成 两个顶点集合S和T,其中源点s∈S,汇点t∈T。记为CUT(S,T)。
如右图:源点:s=1;汇点:t=5。 框外是容量,框内是流量
s1
6
4
2
4
1
3 3
4
5
21
3
3
4
2
5 t
如做实验E2:需要仪器I2 和I3,与t组成集合T。 S与不做的实验E1和没用的 仪器I1组成集合S。 构成割:CUT(S,T) 净收益: E2:25-(6+7)=12 同理 : E1:10-(5+6)= -1 E1+E2:(10+25)-(5+6+7)=17
仪器 5 6 7 I3 I1 I2 实验
定量2: 在任何网络中,如果f是一个流,CUT(S,T)是一个割, 且f的值等于割CUT(S,T)的容量,那么f是一个最大流, CUT(S,T)是一个最小割(容量最小的割)。
证明: 令割CUT(S,T)的容量为C,所以流f的流量也为C。
假设另外的任意流f1,流量为c1,根据流量不超过割的 容量,则c1<=c,所以f是最大流。
实验:4-6中b[j]=-1的点。
2、Plan问题
(2000年国家集训队题目)
【问题描述:】 某软件公司有n个可选的程序项目,其中第i个项目需要耗费资金ai元, 开发成功后可以获得的收益为bi元。 当然,程序项目之间不是独立的:开发第i个项目前,必须先开发出一 些其他的项目,这些项目成为第i个项目的“前驱项目”。 现在给出所有项目的ai和bi以及前驱项目。 你的任务是:帮助该公司从这n个程序项目中选择若干个进行开发,使 获得的总收益最大。 【输入:】 共n+3行。 第一行:n(1<=n<=200). 第二行有n个正整数:a1,a2,。。。,an。 第三行有n个正整数:b1,b2,。。。,bn。 以下n行,第i行每行包含若干个正整数:ri,k1,k2,。。。,kri。第一 个数ri表示第i个项目有ri个前驱项目,ri,k1,k2,。。。,kri表示i个 ri个前驱项目。 【输出:】 一个整数max,表示最大收益。
1)、 顶点集合S={1,2,3}和T={4,5} 构成一个割。
s1
6
4
2
4 1
3 3
4
5
3
2 1
3
4
2
5 t
2)、
顶点集合S={1,3},T={2,4,5} 构成一个割。 4 6
2
4
1
3 3
s1
4
5
3
2 1
3
4
2
5 t
3)、
顶点集合S={1,3,5},T={2,4}不能 构成一个割。
?
s1
6
∞ ∞
∞ ∞
E1
10 t
S
E2
25
6 s 3 2 4 3
1
1
2
2 5 t 9 3
=(2+5+9)-9-(6+3)=(2+5+9)-(9+6+3)
做实验1:净收益:2-6=-4 =(2+5+9)-(5+9)-6=(2+5+9)-(5+9+6)
做实验1,2:净收益:(2+5)-(6+3)=-2
做实验2,3:净收益:(5+9)-(3+4)=7 =(2+5+9)-2-(3+4)=(2+5+9)-(2+3+4)
下列结论成立:
如果X∩Y= ,那么: f(X,(Y1∪Y2))=f(X,Y1)+f(X,Y2) f((X1∪X2),Y)=f(X1,Y)+f(X2,Y)
根据网络流的特点:
成立。
如果V既不是源点也不是汇点,那么: f({V},S∪T)-f(S∪T,{V})=0; 任何一个点,流入的与流出的量相等。 如果V是源,那么: f({V},S∪T)-f(S∪T,{V})=f 对于S中的所有点V都有上述关系式,相加得到: f(S,S∪T)-f(S∪T,S)=f
61
2
3
4
5
2 2
结论1: 最大流时,最小割cut(S,T)中,正向割边的流量=容量, 逆向割边的流量为0。否则还可以增广。 结论2:
在最小割中cut(S,T)中:
① 源点s∈S。 ② 如果i∈S,结点j满足: 有弧<i,j>,并且c[I,j]>f[I,j] 或者有弧<j,i>并且f[j,i]>0,