最小費用最大流模板

2022-04-11 03:31:54 字數 1009 閱讀 9765

演算法引入:

任何容量網路的最大流流量是唯一且確定的,但是它的最大流f並不是唯一的;

既然最大流f不唯一,因此,如果每條弧上不僅有容量限制,還有費用r;

即每條弧上有乙個單位費用的引數,那麼在保證最大流的前提下;

還存在乙個選擇費用最小的最大流問題,即為最小費用最大流問題;

演算法思想:

尋找最大流的方法是從某個可行流出發,找到關於這個流的一條增廣路p;

沿著p調整f,對新的可行流又試圖尋找關於它的增廣路,迴圈直至不存在增廣路為止;

要求最小費用最大流:

如果f是流量為f1的可行流中費用最小者,而p是關於f的所有增廣路中費用最小的增廣路;

那麼沿著p去調整f,得到可行流_f,就是流量為f1的所有可行流中的費用最小者;

這樣當f是最大流時,它也就是所要求的最小費用最大流了;

1

const

int n=1100,inf=0x3f3f3f3f;2

const

int m=n*n;

3int

pre[n],d[n],p[n],ans;

4int

cnt,head[n];

5int

q[m],l,r;

6struct

edge

7e[m];

10void

init()

1115

void add(int u,int v,int w,int

c)16

22void updata(int s,int

t)2333}

34int spfa(int s,int

t)3557}

58}59}

60if(pre[t]==-1)61

return0;

62return1;

63}64void micmaf(int s,int

t)65

micmaf

例題:poj 2135

參考文章:

最小費用最大流模板

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