最大流SAP 鄰接表模板

2021-07-03 03:17:14 字數 982 閱讀 3589

const

int maxn = 1010;//點數的最大值

const

int maxm = 400010;//邊數的最大值

const

int inf = 0x3f3f3f3f;

struct edge

edge[maxm];//注意是maxm

int tol;

int head[maxn];

int gap[maxn], dep[maxn], pre[maxn], cur[maxn];

void init()

//加邊,單向圖三個引數,雙向圖四個引數

void addedge(int u, int v, int w, int rw = 0)

//輸入引數:起點、終點、點的總數

//點的編號沒有影響,只要輸入點的總數

int sap(int start, int end, int n)

u = start;

ans += min;

continue;

}bool flag = false;

int v;

for (int i = cur[u]; i != -1; i = edge[i].next)

}if (flag)

int min = n;

for (int i = head[u]; i != -1; i = edge[i].next)

if (edge[i].cap - edge[i].flow && dep[edge[i].to] < min)

gap[dep[u]]--;

if (!gap[dep[u]])return ans;

dep[u] = min + 1;

gap[dep[u]]++;

if (u != start) u = edge[pre[u] ^ 1].to;

}return ans;

}

最大流模板(SAP演算法)(鄰接表形式)

最大流的sap模板,用了很多次了。今天總結貼下 雖然 不夠精簡,但是自己寫的也總算看起來明白些,不容易錯 據說沒有可以卡sap的最大流。const int maxn 20010 點數的最大值 const int maxm 880010 邊數的最大值 const int inf 0x3f3f3f3f ...

最大流SAP演算法

求最大流有一種經典的演算法,就是每次找增廣路時用bfs找,保證找到的增廣路是弧數最少的,也就是所謂的edmonds karp演算法。可以證明的是在使用最短路增廣時增廣過程不超過v e次,每次bfs的時間都是o e 所以edmonds karp的時間複雜度就是o v e 2 如果能讓每次尋找增廣路時的...

最大流SAP演算法

求最大流有一種經典的演算法,就是每次找增廣路時用bfs找,保證找到的增廣路是弧數最少的,也就是所謂的edmonds karp演算法。可以證明的是在使用最短路增廣時增廣過程不超過v e次,每次bfs的時間都是o e 所以edmonds karp的時間複雜度就是o v e 2 如果能讓每次尋找增廣路時的...