网络流最大流问题-1(增广路——EK)
来源:互联网 发布:中六保五缩水软件 编辑:程序博客网 时间:2024/05/01 23:47
增广路*
增广路定义:在残量网络中的一条从s通往t的路径,其中任意一条弧(u,v),都有其残量网络流量r[u,v]>0。
其中绿色的就是增广路。
增广路算法*
增广路算法:每次用BFS找一条最短的增广路径,然后沿着这条路径修改流量值(实际修改的是残量网络的边权)。当没有增广路时,算法停止,此时的流就是最大流。
增广路算法的效率*
设n = |V|, m = |E|
每次增广都是一次BFS,效率为O(m),而在最坏的情况下需要(n-2增广。(即除源点和汇点外其他点都没有连通,所有点都只和s与t连通)
所以,总共的时间复杂度为O(m*n),所以在稀疏图中效率还是比较高的。
hoj1532 模板代码
<span style="font-size:18px;"> #include <cstdio> #include <cstring> #include <iostream> #include <string> #include <algorithm> #include <map> #include <vector> using namespace std; const int N = 1100; const int INF = 0x3f3f3f3f; struct Node { int to;//终点 int cap; //容量 int rev; //反向边 }; vector<Node> v[N]; bool used[N]; void add_Node(int from,int to,int cap) //重边情况不影响 { v[from].push_back((Node){to,cap,v[to].size()}); v[to].push_back((Node){from,0,v[from].size()-1}); } int dfs(int s,int t,int f) { if(s==t) return f; used[s]=true; for(int i=0;i<v[s].size();i++) { Node &tmp = v[s][i]; //注意 if(used[tmp.to]==false && tmp.cap>0) { int d=dfs(tmp.to,t,min(f,tmp.cap)); if(d>0) { tmp.cap-=d; v[tmp.to][tmp.rev].cap+=d; return d; } } } return 0; } int max_flow(int s,int t) { int flow=0; for(;;){ memset(used,false,sizeof(used)); int f=dfs(s,t,INF); if(f==0) return flow; flow+=f; } } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { memset(v,0,sizeof(v)); for(int i=0;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); add_Node(x,y,z); } printf("%d\n",max_flow(1,m)); } } </span>
1 0
- 网络流最大流问题-1(增广路——EK)
- 最大流(增广路-EK)poj1273
- 网络最大流增广路模板(EK & Dinic)
- 最大流的增广路算法(EK)
- 最大流的算法(EK算法)—>Edmonds-Karp算法(最短路径增广算法)
- poj 1273 最大流EK增广路模板
- 网络流——最大流问题 EK算法
- 网络流——最大流增广路算法
- 网络流增广路Edmonds-Karp算法(EK算法)代码实现
- 增广路算法 Ford-Fulkerson算法 网络最大流问题
- poj1459 网络最大流问题 ek算法
- 网络最大流求解 增广路算法
- 图论--网络流初步(最大流,增广路)
- EK算法(网络流,最大流)
- HDU 3549 Flow Problem 最大流 最小增广路 EK算法 传说中的入门算法
- poj 1273 最大流之最短路径增广法(EK)
- 最大流算法之EK(最短路径增广算法)
- 最大流增广路
- Spark性能优化2
- AndroidStudio中去掉标题栏的两种方式
- [个人博客搬运]ReactiveCocoa学习笔记
- Nodejs——搭建电影展示平台(Express+MongoDB)
- 【POJ1584】A Round Peg in a Ground Hole,第一次的计算几何
- 网络流最大流问题-1(增广路——EK)
- [个人博客搬运]Effective Objective-C 2.0知识点小记
- C++服务器和unity3d的C#通信乱码问题
- VS2013 TeeChart控件使用方法
- git的初次接触
- 回家【推荐】
- Android12个重要知识点(2)
- Nexus搭建Maven私服
- **PHP** 文件操作