網絡流
網絡流 (network-flows) 是一種類比水流的解決問題方法,與線性規劃密切相關。圖論中的一種理論與方法,研究網絡上的一類最優化問題。
網絡流的圖可以抽象成以下模型。
對於一張邊權圖,每條邊的權值指流量。流量 是指允許通過該邊的最大權,而可以有不限多的權同時停留在一點上。
特別地,一圖中存在兩特殊點:源點和匯點。
源點 指初狀態擁有無窮多權的點。一般題目不提供這個點(告訴你就等於告訴你是網絡流了),它是一個虛點。
匯點 指出度爲 的、用於記錄答案的虛點。
如上圖所示, 是源點, 是匯點。
求從源點通過邊走到匯點的權的最大值。這就是 最大流 問題。你可以把它想象成:有一些水管,它們有一定的耐久度,流過一定量的水後就會斷裂失效。從一個有無窮多水的點開始流,最多有多少水流到匯點。
使用 Dinic 算法求最大流步驟如下。
- 把源點視爲第一層,嘗試遍歷所有點並求出深度;
- 嘗試 從淺到深 的順序 從源點開始 流;
- 重複 1. 2. 操作。若無法搜到匯點,結束算法。
例題
求下圖的最大流。
其中 表示無窮大。
我們首先從 分別流 到 。嘗試 ,對答案貢獻爲 ;;。
所以最大流爲 。
當題目描述與“流水”無關時,嘗試將題目轉換成流水模型。
網絡流 24 題索引
序號 | 題目 | 題解 |
---|---|---|
1 | P2756 飛行員配對方案問題 | 已解決 |
2 | P2761 軟件補丁問題 | 未解決 |