網絡流亂記

不會咕!算法

基本概念

下面是一些概念,理解便可,不需強記。網絡

網絡流圖

一個網絡流圖是一個沒有自環的有向連通圖,知足:spa

  • 只有一個入度爲 \(0\) 的點 \(S\),稱爲源點;
  • 只有一個出度爲 \(0\) 的點 \(T\),稱爲匯點;
  • 每條邊 \((i,j)\) 有一個非負實數權值 \(c_{i,j}\),稱爲該邊的容量

允許流

允許流,又叫可行流.blog

在網絡流圖中,對於每條邊 \(e=(i,j)\) 給定實數 \(f_e\), 若是知足:it

  • 每一條邊的容量 \(f_e\le c_e\)class

  • 流量平衡:對於任意 \(x\ne S, T\)\(\sum\limits_{e=(x,i)}f_e=\sum\limits_{e=(i,x)}f_e\)方法

  • 對於源點 \(S\) 和匯點 \(T\) 有:\(\sum\limits_{e=(S,i)}f_e=\sum\limits_{e=(i,T)}f_e=W\)im

    即源點流進去多少,匯點就會流出多少,不會有流量的損失.img

則稱這一組 \(f\) 爲該網絡的一個允許流,\(W\)稱爲他的流量。di

最大流

一個容量 \(W\) 最大的允許流 。

可增廣路

可增廣路,又叫可改進路.

介紹這個概念以前,先看看幾個別的概念:

給定一個允許流 \(f\)

  • 若對於一條邊 \((i,j)\)\(f_{i,j}=c_{i,j}\),則稱 \((i,j)\)飽和弧,不然稱非飽和弧
  • 若對於一條邊 \((i,j)\)\(f_{i,j}=0\),則稱 \((i,j)\)零流弧,不然稱非零流弧
  • 定義一條道路 \(P\),起點是 \(S\),終點是 \(T\)。把 \(P\) 上全部與 \(P\) 方向一致的弧稱爲正向弧 ,正向弧的全體記爲 \(P^+\);把 \(P\) 上全部與 \(P\) 方向相悖的弧稱爲反向弧,反向弧的全體記爲 \(P^-\)

給定一個允許流 \(f\)\(P\) 是從 \(S\)\(T\) 的一條道路,若是知足:

  • \(f_{i,j}\) 是非飽和弧,且 \((i,j)\in P^+\)
  • \(f_{i,j}\) 是非零流弧,且 \((i,j)\in P^-\)

那麼就稱 \(P\)\(f\) 的一條可增廣路,之因此稱爲」可增廣路「,是由於可改進路上弧的流量經過必定的規則修改,能夠使整個流量放大。

最大流算法

基本思路:不斷嘗試尋找增流路徑,增長允許流的流量,直到沒法增長爲止,此過程稱爲增廣過程

Ford-Fulkerson 標號方法

簡介

\(\text{Ford-Fulkerson}\),一種迭代算法,先對圖中全部頂點對的流清零(此時網絡流大小也爲 \(0\))。在每次迭代中,經過尋找一條增廣路徑來增長流的值,一直迭代到沒法再找到增廣路徑爲止。

概念:殘留網路

剩餘的容量+反向平衡的流量共同構成了殘留網絡。

EK算法

SAP算法

Dinic算法

最小費用最大流

題……

寫在最後

感謝 ACM大神 dengsiyu 和 XLightGod 大神的講課!

參考資料:

相關文章
相關標籤/搜索