用的是EdmondsKarp

程序可以再优化的,懒得优化了

EdmondsKarp

#include <iostream>
#include<stdio.h>
#include <queue>
#include <limits>
#include <cstring>using namespace std;
const int maxNode = 202;
int N = 201;//edge
int M = 201;//node
const int maxInt = numeric_limits<int>::max();int g[maxNode][maxNode];
int f[maxNode][maxNode];
int residual[maxNode][maxNode];
int pre[maxNode];bool BFS()
{queue<int> q;q.push(1);memset(pre,0,sizeof(int)*(M+1));int used[maxNode];memset(used,0,sizeof(int)*(M+1));used[1] = 1;while (!q.empty()){int curr = q.front();q.pop();for (int i=1;i<=M;++i){if(residual[curr][i]>0 && !used[i]){pre[i] = curr;if(i==M)return true;q.push(i);used[i] = 1;}}}return false;
}void EdmondsKarp()
{while (BFS()){int minF = maxInt;int curr = M;int beg=0,end = 0;while (curr!=1){int preNode = pre[curr];if(minF > residual[preNode][curr]){minF = residual[preNode][curr];beg = preNode;end = curr;}curr = preNode;}curr = M;while (curr != 1){int preNode = pre[curr];f[preNode][curr] +=minF;residual[preNode][curr] -=minF;residual[curr][preNode] = f[preNode][curr];curr = preNode;}}int sum=0;for (int i=1;i<M;++i){sum +=f[i][M];}cout<< sum<<endl;
}int main()
{while(scanf("%d%d",&N,&M)!=EOF){for (int i=1;i<=M;++i){memset(g[i],0,sizeof(int)*(M+1));memset(f[i],0,sizeof(int)*(M+1));memset(residual[i],0,sizeof(int)*(M+1));}for (int i=0;i<N;++i){int start,end,capacity;scanf("%d%d%d",&start,&end,&capacity);g[start][end] += capacity;//这个地方太坑爹了,不是最大的容量吗,为毛要加呢residual[start][end] += capacity;}/*for (int i=1;i<=M;++i){for(int j=1;j<=M;++j)cout<<g[i][j]<<" ";cout<<endl;}*/EdmondsKarp();}return 0;
}

下面是别人优化的比较好的

#include<iostream>#include<cstring>
#include<queue>
using namespace std;
#define inf INT_MAX
int n,m,a[205][205],pre[205];
int bfs()
{queue<int>Q;Q.push(1);pre[1]=0;memset(pre,-1,sizeof(pre));int t,i;while(!Q.empty()){t=Q.front();Q.pop();for(i=2;i<=n;i++)if(pre[i]==-1&&a[t][i]>0){pre[i]=t;Q.push(i);if(i==n)   return 1;}}return -1;
}
int maxflow()
{int res=0,ans,t;while(bfs()==1){t=n;ans=inf;while(t!=1){if(a[pre[t]][t]<ans)   ans=a[pre[t]][t];t=pre[t];}           res=res+ans;t=n;while(t!=1){a[pre[t]][t]-=ans;a[t][pre[t]]+=ans;t=pre[t];}}return res;
}
int main()
{while(scanf("%d%d",&m,&n)!=EOF){int i,j;memset(a,0,sizeof(a));for(i=0;i<m;i++){int b,c,d;scanf("%d%d%d",&b,&c,&d);a[b][c]+=d;}printf("%d\n",maxflow());}
}

最大流效率更高的算法为:

Push-Relabel算法

Relabel-to-Front算法(http://cuitianyi.com/blog/%E6%B1%82%E6%9C%80%E5%A4%A7%E6%B5%81%E7%9A%84relabel-to-front%E7%AE%97%E6%B3%95/)

Preflow-Push算法

Dinic算法(可以参考国家集训队 2007 王欣上《浅谈基于分层思想的网络流算法》)

poj1273 最大流相关推荐

  1. 2018 Spring Training 图论 合集

    https://cn.vjudge.net/contest/229893#overview 题目链接 A.Uva 302 判断能不能走就是一个一笔画问题,(欧拉回路),因为题目要求是要回到原点,因此所 ...

  2. POJ1273 Drainage Ditches(最大流基础题)

    在讨论问题之前先说一句,如果你这题WA了很久,请先看以下一句话,或许可以省下你翻遍全文的时间: 注意考虑重边.(是不是想大呼[Bi-]?传送门:http://poj.org/problem?id=12 ...

  3. HDU 1532 Drainage Ditches(poj1273)【E-K 最大流】

    第一道最大流题. 水题,裸题. Sample Input 5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10 Sample Output 50 输入m n, m是边数,n是点 ...

  4. POJ-1273(最大流-Augment Path,EK,BFS)

    1273:Drainage Ditches 查看 提交 统计 提问 时间限制: 1000ms 内存限制: 65536kB 描述 Every time it rains on Farmer John's ...

  5. (通俗易懂小白入门)网络流最大流——EK算法

    网络流 网络流是模仿水流解决生活中类似问题的一种方法策略,来看这么一个问题,有一个自来水厂S,它要向目标T提供水量,从S出发有不确定数量和方向的水管,它可能直接到达T或者经过更多的节点的中转,目前确定 ...

  6. 最大流算法之三:ISAP

    最大流算法之三:ISAP <转> (2009-08-14 19:24:27) 转载▼ 标签: it 分类: 理论 通常的 SAP 类算法在寻找增广路时总要先进行 BFS,BFS 的最坏情况 ...

  7. (网络流)最大流复习

    今天是2017/5/10,DCDCBigBig的第三篇博文 这段时间先把图论的一些算法复习一下,过段时间再搞数据结构吧... 最大流 基本概念 最大流问题(Maximum Flow Problem)是 ...

  8. 最大流算法-ISAP

    引入 最大流算法分为两类,一种是增广路算法,一种是预留推进算法.增广路算法包括时间复杂度\(O(nm^2)\)的EK算法,上界为\(O(n^2m)\)的Dinic算法,以及一些其他的算法.EK算法直接 ...

  9. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

最新文章

  1. GIS+=地理信息+云计算技术——Spark集群部署
  2. Android小项目之--前台界面与用户交互的对接 进度条与拖动条(附源码)
  3. 支付宝PC即时到账和手机网站支付同步
  4. php 数组交集函数,PHP array_intersect_uassoc 函数
  5. python3多进程 进程池 协程并发
  6. ssm整合之四 分页
  7. 在Word里使用部分正则表达式
  8. Suse系统用户不能登录报错
  9. c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
  10. 微信小程序 this.data与this.setData
  11. ES6面试题(参考文档)
  12. 肖哥所有课程/HCNA HCNP/安全/云计算/虚拟化/linux/视频教程/资料软件下载链接
  13. 【Axure原型模板】APP原型设计通用模板 移动端通用原型模板
  14. ArcGIS 10.7基础:三种栅格影像裁剪操作
  15. 浙江大学黄杨思博计算机学院,竺可桢学院2010-2011学年荣誉称号发文名单
  16. ValueError X has 2 features, but LogisticRegression is expecting 5 features as input
  17. MyBatis返回Map时值为null的字段会丢失
  18. Python实现自省的方法有哪些?
  19. 【文献翻译】MDC-Checker:一种新的多域配置网络风险评估框架
  20. matlab画线的形状颜色

热门文章

  1. 在网络中同时使用kfold和使用Dropout(基于Iris数据集)
  2. 六、爬虫中重要的解析库xpath和BeautifulSoup
  3. 相较神经网络,大名鼎鼎的傅里叶变换,为何没有一统函数逼近器?
  4. 成都内推 | 腾讯游戏王者荣耀算法团队招聘算法实习生
  5. 今日arXiv精选 | 11篇ICCV 2021最新论文
  6. 用少于10行代码训练前沿深度学习新药研发模型
  7. 两种方法判断有向图是否有环【DFS】【拓扑排序】
  8. flink 本地_Flink原理Apache Flink漫谈系列 State
  9. hibernate原理
  10. 分布式数据库CAP原理和Base