演算法引入:
任何容量網路的最大流流量是唯一且確定的,但是它的最大流f並不是唯一的;
既然最大流f不唯一,因此,如果每條弧上不僅有容量限制,還有費用r;
即每條弧上有乙個單位費用的引數,那麼在保證最大流的前提下;
還存在乙個選擇費用最小的最大流問題,即為最小費用最大流問題;
演算法思想:
尋找最大流的方法是從某個可行流出發,找到關於這個流的一條增廣路p;
沿著p調整f,對新的可行流又試圖尋找關於它的增廣路,迴圈直至不存在增廣路為止;
要求最小費用最大流:
如果f是流量為f1的可行流中費用最小者,而p是關於f的所有增廣路中費用最小的增廣路;
那麼沿著p去調整f,得到可行流_f,就是流量為f1的所有可行流中的費用最小者;
這樣當f是最大流時,它也就是所要求的最小費用最大流了;
1micmafconst
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
例題: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...