最小費用最大流

2022-04-30 10:39:16 字數 1334 閱讀 8131

學習了網路流最基本的最大流演算法以後,當然就會有更進一步的問題,那就是最小費用最大流。

顧名思義,最小費用最大流就是在原本的有向圖中,單位流量加入費用,並在原本最大流的基礎上找到乙個費用最小的最大流。

很明顯,在乙個網路中最大流可能有多種流法(懂那個意思就行了,聽著彆扭就算了啊,不要緊的糾結要不要得?),所以在原本最大流的基礎上,運用spfa或者其他方法進行類似最短路的演算法就可以找到最小費用最大流,,,具體還是看**吧(我實在是太懶了_(:з」∠)_):

這裡是洛谷的模板題:

#include#include

#include

#include

#include

#include

#include

#define inf 1e9

using

namespace

std;

const

int n=5050

;const

int m=50050

;deque

q;intn,m,start,endd;

intdis[n],ans,res;

int head[n],size=1

;bool

vis[n],inq[n];

struct

nodeedge[m

<<1

];inline

intread()

while(ch>='

0'&&ch<='9')

return flag?-num:num;

}inline

void add(int x,int y,int z,int

c)inline

void add_edge(int x,int y,int z,int

c)void

ready()

}inline

bool

bfs()}}

} return dis[start]0];}

inline

int dfs(int u,int

flow)

} return

used;

}void

work()

} printf(

"%d %d

",ans,res);

}int

main()

這裡bfs的時候使用了雙端佇列,實際上不用也可以,但是用的話會快不少,據我實測,使用雙端佇列最慢的點388ms,不用雙端佇列最慢的點600ms

差距貌似挺大的。。。囧。。。不過一般情況下不用也是沒問題的(除非出題人喪心病狂到卡這種資料。。。)

最小費用最大流

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

最小費用最大流

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...