問題:最大流問題
假設:把一些物品從結點s(源點),運送到t(匯點),可以從其他結點中轉。
1.容量:對於一條邊(u,v),它的物品上限成為容量,記為c(u,v)
2.流量:實際運送的物品成為流量,記為f(u,v)
目標:最大化從s點流出的淨流量,即最大化
容量c與流量f滿足3個性質:
1.容量限制:對g中的每條邊(vi,vj),有0≤fij≤cij;即每條邊上的流量非負而且最大也只能達到容量的限制。
2.流量平衡:對中間點(除了結點是s,t),有
3.斜對稱性:
增廣路演算法:
殘量網路:由計算出的流量和容量之差的邊作出的圖
基本思想:求出增廣路中所有殘量的最小值d,再把對應的所有邊上的流量增加d即可。
#include#include#include#includeusing namespace std;
const int maxn = 20; //設定權值最大值為20
const int inf = (1 << 30); //定義字元常量 inf 並賦值乙個很大的值。inf=1073741824
//1 << 30 表示 1*2^30
struct edge
};struct edmondskarp
edges.clear();
} void addedge(int from, int to, int cap)
int maxflow(int s, int t)
}if (a[t])
}if (!a[t])
for (int u = t; u != s; u = edges[p[u]].from)
flow += a[t];//增加總流量
} return flow;
}} ek;
最小割最大流定理:
最小割:把所有頂點分成兩個集合s和t=v-s,其中源點在集合s中,匯點在集合t中。
在增廣路演算法結束時,f是s-t最大流,(s,t)是s-t的最小割
網路流初步 sap演算法
什麼是網路流?請看下圖 這是乙個有向圖,每一條邊都對應著兩個數值 前面的稱為流量,用f u,v 表示,後面的稱為容量,用c u,v 表示,網路中有兩個特殊的點,源點s和匯點t。一 容量限制,對於所有原圖中的變,均有f u,v c u v 二 反對稱性,為了方便計算,我們定f u,v 和f v u 中...
網路流初步詳解2
網路流初步詳解中大致談了一下最大流的一些演算法,其中dinic是非常重要的,補一句 最大流 最小割。本文包括 1.費用流的概念及基本性質 2.edmonds karp增廣路演算法求費用流 3.一些關於費用流的技巧 4.關於費用流的刷題指南 假設您已經理解了dinic演算法和ek演算法二者之一。對於我...
2021 網路流初步
首先是一些概念,容量,流量,飽和弧,非飽和弧,零弧,非零弧,增廣路,殘量,殘量網路 這個方法的時間複雜度比較差 為 一直bfs找增廣路,直到找不到演算法結束,每次找到後,修改正向邊和反向邊的邊權即可 includeusing namespace std int n,m,s,t const int i...