最小費用最大流詳解與模板

2021-07-15 17:00:03 字數 1222 閱讀 2981

最小費用最大流:

在最大流有多組解時,給每條邊在附上乙個單位費用的量,問在滿足最大流時的最小費用是多少?

思想:

給出乙個容量網路,那他的最大流一定是乙個定值(即使是有多個一樣的最大值)。所以我們從開始的可行流開始增廣時,最終的增廣量是一定的。所以為了滿足最小費用我們只需要每次找最小費用的增廣路即可,直到流量為最大值。這個問題僅僅是在求增廣路時先考慮費用最小的增廣路,其他思想和ek思想一樣。

我們學過spfa求最短路演算法(bellman-ford的佇列優化),所以我們將弧的費用看做是路徑長度,即可轉化為求最短路的問題了。只需要所走的最短路滿足兩個條件即可:1可增廣cap> flow,2路徑變短d[v]>d[u]+cost< u,v> 。

關於建圖的方式和dinic,isap演算法一樣,如有疑問可以去我們其他相關部落格看看

mcmf模板:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define n 1000

#define inf 100000000

struct edge;};

struct mcmf

bool spfa(int s,int t,int &flow,int &cost)//尋找最小費用的增廣路,使用引用同時修改原flow,cost}}

}if(d[t]==inf) return

false;//匯點不可達則退出

flow+=a[t];

cost+=d[t]*a[t];

int u=t;

while(u!=s)//更新正向邊和反向邊

return

true;

}int mincotmaxflow(int s,int t)

};int main()

最小費用最大流模板

const int n 1010 點 const int m 2 10010 邊 const int inf 1000000000 struct nodee m int next1 m point n dis n q n pre n ne ne為已新增的邊數,next,point為鄰接表,dis為花...

最小費用最大流模板

一 最小費用最大流的模型 在保證流量最大的前提下,所需的費用最小,這就是最小費用最大流問題 帶有費用的網路流圖 g v,e,c,w v 頂點 e 弧 c 弧的容量 w 單位流量費用。任意的弧對應非負的容量c i,j 和單位流量費用w i,j 滿足 流量f是g的最大流。在f是g的最大流的前提下,流的費...

最小費用最大流 模板

因為含有負權邊,所以使用spfa進行增廣。指定流量的最小費用流可以初始化乙個f,然後每次一直迴圈到f 0為止。函式返回的是最大流,當然經過少量修改可以返回最小費用,利用最小流量乘以相應的費用即可。prevv記錄父節點,preve記錄當前節點對應父節點的第幾條邊。const int inf 0x3ff...