最小費用最大流原理講解 spfa模板向和板子

2021-10-23 09:26:48 字數 3286 閱讀 6793

最大流板子

如 果你

會最大流

,那這個

基本上可

以秒懂。

如果你會最大流,那這個基本上可以秒懂。

如果你會最大

流,那這

個基本上

可以秒懂

。 問 題描

述\color問題描述

問題描述 給出一

個網路圖

,以及其

源點s和

匯點

t給出乙個網路圖,以及其源點s和匯點t

給出乙個網路

圖,以及

其源點s

和匯點t

每 條邊

已知其最

大流量和

單位流量

費用

每條邊已知其最大流量和單位流量費用

每條邊已知其

最大流量

和單位流

量費用求出其

網路最大

流和在最

大流情況

下的最小

費用

。求出其網路最大流和在最大流情況下的最小費用。

求出其網路最

大流和在

最大流情

況下的最

小費用。

p3381 【模板】最小費用最大流

可以發現相比最大流多了乙個單位流量費用的限制

那麼原來利用bfs找路徑的思想就不可行了,因為找的路徑代價可能很大

那 找怎

樣的路徑

比較合理

?\color那找怎樣的路徑比較合理?

那找怎樣的路

徑比較合

理? 把單位

費用看作

邊的權值

,從源點

到匯點跑

最短

路把單位費用看作邊的權值,從源點到匯點跑最短路

把單位費用看

作邊的權

值,從源

點到匯點

跑最短路每次

找一條s

到t的花

費最小的

路徑,同

時記錄路

徑和路上

的最小流

量每次找一條s到t的花費最小的路徑,同時記錄路徑和路上的最小流量

每次找一條s

到t的花

費最小的

路徑,同

時記錄路

徑和路上

的最小流

量 如 果匯

點的最短

路被更新

,說明找

到路徑,

完成了b

fs判斷

是否有路

徑的功能

如果匯點的最短路被更新,說明找到路徑,完成了bfs判斷是否有路徑的功能

如果匯點的最

短路被更

新,說明

找到路徑

,完成了

bfs判

斷是否有

路徑的功

而且通過記

錄走到匯

點的路徑

,可以直

接對路徑

上邊的流

量做修改

通過記錄走到匯點的路徑,可以直接對路徑上邊的流量做修改

通過記錄走到

匯點的路

徑,可以

直接對路

徑上邊的

流量做修

改 如 此一

來,不停

的利用s

pfa找

最短路即

可如此一來,不停的利用spfa找最短路即可

如此一來,不

停的利用

spfa

找最短路

即可 最小費

用最大流

(spf

a版本)

就是這樣

一種演算法

最小費用最大流(spfa版本)就是這樣一種演算法

最小費用最大

流(sp

fa版本

)就是這

樣一種算

#include using namespace std;

const int maxn=50009;

const int inf=1e9;

int n,m,s,t;

int maxflow,mincost;

int dis[maxn],head[maxn<<1],cnt=1,incf[maxn],pre[maxn],vis[maxn];

struct edged[maxn<<1];

void add(int u,int v,int flow,int w)//flow最大流量,w單位費用

bool spfa()

} } if( dis[t]==inf ) return 0;

return 1;

}void dinic() }

}int main()

dinic();

cout << maxflow << " " << mincost;

}

下面是最大費用最大流,就是建邊的時候把邊權取反就行,輸出再次取反

#include

using

namespace std;

const

int maxn=

50009

;const

int inf=

1e9;

int n,m,s,t,a[59]

[59];

int maxflow,mincost;

int dis[maxn]

,head[maxn<<1]

,cnt=

1,incf[maxn]

,pre[maxn]

,vis[maxn]

;struct edged[maxn<<1]

;void

add(

int u,

int v,

int flow,

int w)

//flow最大流量,w單位費用

bool

spfa()

}}if( dis[t]

==inf )

return0;

return1;

}void

dinic()

}}intmain()

add(s,

1,m,0)

;add

(n*n*

2,t,m,0)

;dinic()

; cout <<

-mincost;

}

最小費用最大流(SPFA版本)

1 include 2 include 3 include 4 include 5 6using namespace std 78 define ll long long 9 define pb push back 10 define fi first 11 define se second 121...

模板 SPFA增廣 最小費用最大流

簡單的用spfa增廣進行費用流的求解 與ek求最大流類似,只是此時要求最大流的同時費用最小 所以用spfa增廣,就可以費用盡量小 模板 include include include using namespace std const int maxn 705,maxe 144005,inf 0x3...

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...