今天讲了神奇的网络流,毫不意外,听证明听挂了。。。。
还是在写博客的时候再学习一下吧
1.定义:
-
一个流网络 G = ( V , E ) G=(V,E) G=(V,E) 为一张满足以下条件的有向图:
从 i i i到 j j j的容量通常用 c [ i , j ] c[i,j] c[i,j]表示,流量则通常是 f [ i , j ] f[i,j] f[i,j]
1.每一条边有一个非负容量,即对于任意 E E E中的 ( u , v ) (u,v) (u,v), 有 c ( u , v ) ≥ 0 c(u,v)\geq 0 c(u,v)≥0
2.如果 G G G中存在边 ( u , v ) (u,v) (u,v) , 那么不存在 ( v , u ) (v,u) (v,u)。我们将图中不存在的边的容量定为 0 0 0。
3.图中含有两个特殊节点:源点 s s s 与汇点 t t t。
源点呢就是只出不进所以叫源点
汇点呢就是只进不出所以叫汇点
-
一个流可看做是一个从 V × V V\times V V×V到 R R R的映射,满足下面两条性质:
-
容量限制: 对于任意的 u u u, v v v, 0 ≤ f ( u , v ) ≤ c ( u . v ) 0\leq f(u,v) \leq c(u.v) 0≤f(u,v)≤c(u.v)
-
流量守恒:对于任何非源汇的中间节点 u u u,我们有:
∑ v ∈ V f ( v , u ) = ∑ v ∈ V f ( u , v ) \sum_{v\in V}f(v,u)=\sum_{v\in V}f(u,v) v∈V∑f(v,u)=v∈V∑f(u,v)
-
2.最大流
-
最大流问题,即是找出一个满足上述条件的 f f f,使得 ∑ v ∈ V f ( s , v ) \sum_{v\in V}f(s,v) v∈V∑f(s,v)被最大化
简单点说就是你有一堆东西要从源点运往汇点,有向图中的一条边代表一条路,每条路有一定的限制(就是容量),求出每次最多运多少东西到汇点
-
最大流问题 ⟶ \longrightarrow ⟶ 带反向边的最大流问题
-
一个流 f f f的流量 ∣ f ∣ |f| ∣f∣定义为:
∣ f ∣ = ∑ v ∈ V f ( s , v ) − ∑ v ∈ V f ( v , s ) |f|=\sum_{v\in V} f(s,v)-\sum_{v\in V}f(v,s) ∣f∣=v∈V∑f(s,v)−v∈V∑f(v,s)
(由于在图 G G G中不存在反向边,因而在上面的讨论中只需要最大化前半部分。)
3. 最大流建模
-
是否存在从 s s s到 t t t的可经过相同节点不经过相同边的两条路径?
-
是否存在从 s s s到 t t t的不可经过除 s s s、 t t t外相同节点的两条路径?
-
是否存在从 s s s到 t t t的不可经过除 s s s、 t t t外相同节点和相同边的两条路径?
4.最大流算法
-
残量网络
-
对于网络 G G G,其残量网络 G G G_ f f f与 G G G的差别在于每条边的边容量修改为 G G G中边容量减去当前流的该边流量。具体来说, c f ( u , v ) = c ( u , v ) − f ( u , v ) c_f(u,v)=c(u,v)-f(u,v) cf(u,v)=c(u,v)−f(u,v)
简单点说就是:残量网络=容量网络-流量网络
-
另外,残量网络中还包含原图中所有边的反向边,容量等同于正向边在 f f f中当前流量,用于“反悔”时将流送回起点: c f ( v , u ) = f ( u , v ) c_f(v,u)=f(u,v) cf(v,u)=f(u,v)
-
增广