最大流的增廣路演算法

2021-09-28 05:01:16 字數 813 閱讀 6335

模板題目鏈結 洛谷p3376

模板來自演算法競賽入門經典(第2版)--劉汝佳

#include using namespace std;

#define inf 0x3f3f3f3f

typedef long long ll;

const int maxn = 100010;

struct edge //記錄這條邊的資訊

//初始化

};int n, m;

vectore; //儲存邊的資訊

vectorg[maxn]; //鄰接表存圖,這裡存的是邊在e裡的編號

int a[maxn]; //記錄點目前的流量

int p[maxn]; //記錄路徑,p[i] 即由s到t路徑上點i的前乙個點,

void init(int n) //初始化清空

void addedge(int from,int to,int cap)

int maxflow(int s,int t)

}if(a[t]!=0)//如果水流已經流到終點,結束此次迴圈

break;

}if(a[t]==0) //如果沒有找到增廣路,退出迴圈

break;

for (int i = t; i != s;i=e[p[i]].from) //回溯找到水流的路徑

ans += a[t];

}return ans;

}int main()

cout << maxflow(start, ed) << endl;

return 0;

}

網路最大流求解 增廣路演算法

增廣路演算法 根據增廣路地理,為了得到最大流,可以從任何乙個可行流開始,沿著增廣路對網路流進行增廣,直到網路中不存在增廣路為止,這樣的演算法稱為增廣路演算法。增廣路演算法流程如下。1 取乙個可行流f作為初始流 如果沒有給定可行流,則取零流作為初始流 2 尋找關於f的增廣路p,如果找到,則沿著這條增廣...

最大流 增廣路演算法 最小費用最大流

cap flow代表連通,cap flow代表不連通 最大流 不停的尋找s連通至t的路徑,更新.直到找不到路徑 注 p u 1和p u 互為方向邊 include include include include include using namespace std const int maxn 1...

hdu 1532最大流 增廣路

include include include includeusing namespace std define max 210 int flow max max int pre max mark max int n,m,f int q,z void maxliu if mark n 如果mark...