初识网络流——最大流EK算法
来源:互联网 发布:淘宝4钻 编辑:程序博客网 时间:2024/06/06 02:50
网络流就是一张有向图,D=(V,E,C),其中V为该图的顶点集,E为有向边,C是弧上的容量,顶点集中包括一个起点和一个终点。
最大流的意思就是从起点出发到终点,在不超过容量的基础上走出一条最大流,比如运送物资,EK算法是比较基础的最大流算法,就是bfs找增广路法,至于增广路是啥我还说不清楚。
最大流入门题
http://poj.org/problem?id=1273
AC代码,虽然我不是很喜欢这个代码(因为不是我自己写的哈哈)
#include<iostream>using namespace std;const int msize = 205;#include<queue>#include<algorithm>int n, m;//n条路,m个结点int r[msize][msize];int pre[msize];//记录结点i的前向结点bool vis[msize];//记录结点i是否已经被访问//用BFS来判断从结点s到t的路径上是否还有deltabool BFS(int s, int t){ queue<int>que; memset(pre, -1, sizeof(pre)); memset(vis, 0, sizeof(vis)); pre[s] = s; vis[s] = true; que.push(s); int p; while (!que.empty()) { p = que.front(); que.pop(); for (int i = 1; i <= m; i++) { if (r[p][i] > 0 && !vis[i]) { pre[i] = p; vis[i] = true; if (i == t)//存在增广路经 return true; que.push(i); } } } return false;}int EK(int s, int t){ int maxflow = 0, d; while (BFS(s, t)) { d = INT_MAX; //若有增广路经,就找出最小的delta for (int i = t; i != s; i = pre[i]) d = min(d, r[pre[i]][i]); //这是反向边 for (int i = t; i != s; i = pre[i]) { r[pre[i]][i] -= d; r[i][pre[i]] += d; } maxflow += d; } return maxflow;}int main(){ while (cin >> n >> m) { memset(r, 0, sizeof(r)); int s, e, c; for (int i = 0; i < n; i++) { cin >> s >> e >> c; r[s][e] += c;//防止有重边 } cout << EK(1, m) << endl; } return 0;}
☝我惊喜地发现这个跟hdu上的1532题是一样的,样例都是一样的!
http://acm.hdu.edu.cn/showproblem.php?pid=1532
关键在于建图
http://poj.org/problem?id=1459
经典题
http://poj.org/problem?id=1149
阅读全文
0 0
- 初识网络流——最大流EK算法
- 最大网络流 EK 算法
- 网络最大流 EK算法
- 网络流——最大流问题 EK算法
- 【转】网络最大流——EK算法详解
- 最大流——EK算法
- 最大流——EK算法
- EK算法(网络流,最大流)
- 网络流--求最大流:EK算法
- poj1459 网络最大流问题 ek算法
- 最大流EK算法
- 最大流EK算法
- 最大流-EK算法
- 最大流-EK算法
- 网络流之最大流算法——EK算法(通俗讲解)
- 网络流EK算法
- 网络流EK算法
- 网络流EK算法
- 数据结构导论之第二遍
- 网页查看github代码利器,Octotree
- 信息安全原理与实践学习
- HDU 6143 Killer Names(组合数学 递推 17多校第八场)
- Palindrome Function
- 初识网络流——最大流EK算法
- ubuntu下使用vi是方向键变乱码 退格键不能使用的解决方法
- js高级教程 第六章-面对对象的程序设计(三)
- 例2-19 用自-10~10的序号序列,给出离散序列e^-n的折叠信号,并绘图进行比较
- HDU 6133 Army Formations
- hdu 1233 【Kruskal】
- CentOS6.3配置yum源
- Java中Synchronized(this)和Synchronized(class)的区别
- 关于python以及numpy运行速度的一点思考和记录