【网络流】:一些基本知识

来源:互联网 发布:blog与mysql的分离 编辑:程序博客网 时间:2024/05/16 15:41


1)求最小割的割集:

在最大流中,源点 和残留网络中所有 可达的节点构成最小割。


2)最大流和最小割唯一性的关系





3)怎么判断一个流图中的最小割是否唯一

先求最大流,得到残留网络,从源点出发得到能够到达的结点,然后从汇点出发逆着边的方向往回走得到能够到达的结点(即能够到达汇点的结点),如果结点全部能够被访问到,最小割就是唯一的。否则如果中间有结点,两边都访问不到,最小割就不是唯一的。以图 2 为例,残留网络中所有边的方向正好反过来, 源点能够到达的结点只有 s,能够到达汇点的只有 t, 存在结点使两边都访问不到, 所以最小割不是唯一的。

结点分为三类:( 1) upstream 上游结点: 在所有最小割中都属于 A 集合(源点所在的集合)( 2) middle 中间结点: 除了上游节点和下游节点之外的其它节点( 3) downstream 下游结点: 在所有最小割中都属于 B 集合(汇点所在集合)计算一个流图的最大流,然后得到残留网络,源点能够到达的结点就是上游结点,能够到达汇点的就是下游结点,其它为中间结点。 最小割是唯一的当且仅当中间节点为空。


4)最大流算法回顾
Ford-Fulkerson: 凡是用增广路径求最大流的都可以说是Ford-Fulkerson算法
Edmonds-Karp: 每次直接用BFS找增广路径
Dinic: 先用BFS找层次图, 然后在层次图上用 DFS 找增广路径那么能不能只用DFS 来找增广路径?正确性可以保证, 但是容易出现低效率的情况, 举例流图如下( 有可能需要增广2*106次):

Blocking Flow算法:正向边全都被堵死了,Dinic 算法本质上是一个 Blocking Flow算法。
Dinic 算法:第一次用 BFS 找层次图, 然后 DFS 只准沿着层次往下走, 当 Dinic算法这一阶段走完的时候, 说明这个层次图是不连通的,这个时候的流对于开始阶段时候的流图来说就是Blocking Flow
Blocking Flow 和最大流的关系:如果一个流是最大流, 那么它一定是 Blocking Flow, 但是倒过来就不行。反例如下图所示(这个流图中最大流实际上应该是2, 但是你可以有一个Blocking Flow 直接从最上面 3 条有向边走, 但它不是最大流):





5)几个匹配定理:

Hall’s theorem: 如果分成X Y 两边的二部图 G=(V,E)有一个完美匹配,那么对所有A X 的必须有Γ ≥(A)A Γ(A)表示 A Y 中对应的点的集合。
Menger’s theorem
    Edge disjoint path 版本:在每个具有节点 s t 的有向图(或无向图)中,边不交 s-t 径的最大数目等于为分离 s t 所需移走的最少边数。
    Node disjoint path 版本:Given a directed (or undirected) graph with two nonadjacent nodes s and t, the max number of internally node-disjoint s-t paths equals the min number of internal nodes whose removal disconnects t from s.



1 0