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