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 如果能讓每次尋找增廣路時的...