網 絡流的基本問題為:設乙個有向賦權圖g(v,e),v=,其中有兩個特殊的節點s和s』。s稱為發點,s』稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量(容量)。問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?
設有乙個網路圖g(v,e),,v=,e中的每條邊(i,j)對應乙個容量c(i,j)與輸送單位流量所需費用a(i,j)。如有乙個運輸方案(可行流),流量為f(i,j),則最小費用最大流問題就是這樣乙個求極值問題:
其中f為g的最大流的集合,即在最大流中尋找乙個費用最小的最大流。
確 定最小費最大流的過程實際上是乙個多次迭代的過程。基本思想是:從零流為初始可行流開始,在每次迭代過程中對每條邊賦予與c(i,j)(容量)、 a(i,j)(單位流量運輸費用)、f(i,j)(現有流的流量)有關的權數ω(i,j),形成乙個有向賦權圖。再用求最短距離路徑的方法確定由發點s至 收點s』的費用最小的非飽和路,沿著該路增加流量,得到相應的新流。經過多次迭代,直至達到最大流為止。
構造權數的方法如下:
對任意邊(i,j),根據現有的流f,該邊上的流量可能增加,也可能減少。因此,每條邊賦予向前費用權ω+(i,j)與向後費用權ω-(i,j):
對於賦權後的有向圖,如把權ω(i,j)看作長度,即可確定s到s』 的費用最小的非飽和路,等價於從s到s』 的最短路。確定了非飽和路後,就可確定該路的最大可增流量。因此需對每一條邊確定乙個向前可增流量△+(i,j)與向後可增流量△-(i,j):
因此,確定最小費用最大流的具體演算法如下:
(1)從零流開始,令f≡0。
(2)賦權
(3)確定一條從s到s』的最短路
r(s,s』)={(s,i1),(i1,i2),…,(ik,s』)}
若r(s,s』)的長度為+∞,表明已得到最小費用最大流,則停止;否則轉向(4)。
(4)確定沿著該路r(s,s』)的最大可增流量
α=min{△(s,i1),△(i1,i2),…,△(ik,s』)}
其中根據邊的取向決定取△+或△-。
(5)生成新的流
若f(i,j)已為最小費用最大流,則停止;否則轉向(2)。
最小費用最大流
const int maxn 250 const int maxm 62272 const int inf 0x4ffffff int n,m struct edge edge maxm int head maxn cnt void init void addedge int u,int v,int...
最小費用最大流
看了最小費用最大流的問題,感覺好難啊,想不到,關鍵就是想不到,知道模板什麼用,只是能a題僅此而已,要想學深真的不是件容易的事情啊。為此我總結了以下幾點供複習知識點或者是講課時用 網路流的費用 在實際應用中,與網路流有關的問題,不僅涉及流量,而且還有費用的因素。網路的每一條邊 v,w 除了給定容量ca...
最小費用最大流
最小費用最大流 minimum cost maximum flow 簡稱費用流 mcmf 是最大流演算法的乙個分支。現實生活中,如運輸物資,管道輸水等等不僅要考慮最大流量,有時還要考慮運輸費用問題,費用流問題由此而生。在乙個圖中,每條邊不僅有乙個流量值,還有乙個費用值,一般表示是在這條邊上流乙個單位...