最小費用最大流模板

2021-06-20 12:19:03 字數 876 閱讀 6112

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為花費,pre為父親節點

bool u[n];

void init()

void add_edge(int f, int t, int d1, int d2, int w)

bool spfa(int s, int t, int n)

}} }

if(pre[t] == -1)

return false;

return true;

}void mcmf(int s, int t, int n, int &flow, int &cost)

tmp = t;

while(tmp != s)

flow += arg;

cost += arg * dis[t]; }}

//建圖前執行init()

//節點下標從0開始

//加邊時執行add_edge(a,b,c,0,d)表示加一條a到b的流量為c花費為d的邊(注意花費為單位流量花費)

//特別注意雙向邊,執行add_edge(a,b,c,0,d),add_edge(b,a,c,0,d)較好,不要只執行一次add_edge(a,b,c,c,d),費用會不對。

//求解時代入mcmf(s,t,n,v1,v2),表示起點為s,終點為t,點數為n的圖中,最大流為v1,最大花費為v2

最小費用最大流模板

一 最小費用最大流的模型 在保證流量最大的前提下,所需的費用最小,這就是最小費用最大流問題 帶有費用的網路流圖 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...

最大流最小費用(模板)

在最大流上加了乙個費用 用ek的方法先用spfa找最小費用的乙個可行流,在一次次修改,與最大流思想一樣,不過找最短路時需要建乙個負邊 include include include include using namespace std const int m 199999 int n,m,s,t ...