最大流的问题就不重复了,思路如下:

每次找到一条从s到t的路径,  其容量为所经历的所有边上容量最小的一个;
将这个路径的容量加入图的总容量;
沿着刚才那条路径走,沿两个方向更新边

找路径可以用bfs, 每次bfs 为了保证不重复经过同一个点,可以用visit数组纪录这个点是否被访问过;

再用一个一维数组纪录路径就可以了

这种方法里 edmonds carp的复杂度是O(NE)

为了更好的说明edmonds carp算法,练了一道poj 1273题,

代码如下

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;const int maxn =  205;
long long flw[maxn][maxn];
int n, m;
long long edmondscarp(){long long sumrt = 0;while(true){int visit[maxn], recroute[maxn];memset(visit, 0, sizeof(visit));memset(recroute, -1, sizeof(recroute));visit[1] = 1;queue<int> aqueue;aqueue.push(1);long long minflw = 0x7fffffff;bool findrt = false;while(!aqueue.empty()){int p = aqueue.front();aqueue.pop();for(int j = 1; j <= n; ++j){if((!visit[j]) && flw[p][j] > 0){minflw = min(minflw, flw[p][j]);recroute[j] = p;      if(j == n){findrt = true;break;}aqueue.push(j);visit[j] = true;}}if(findrt){break;}}if(!findrt){break;}sumrt += minflw;int curp = n;for(curp = n; curp != 1; curp = recroute[curp]){flw[recroute[curp]][curp] -= minflw;flw[curp][recroute[curp]] += minflw;}}return sumrt;
}
int main(){while(scanf("%d%d",&m, &n)!=EOF){memset(flw, 0, sizeof(flw));long long s, e, c;for(int i = 1; i <= m; ++i){scanf("%lld%lld%lld", &s, &e, &c);flw[s][e] += c;}printf("%lld\n",edmondscarp());}return 0;
}

转载于:https://my.oschina.net/u/1421373/blog/379991

最大流 edmonds carp相关推荐

  1. 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)

    题目链接:草地排水 若一条从源点到汇点的路径上各条边的剩余容量都大于0,则称这条路径为一条增广路. Edmonds-Karp增广路的策略就是不断用bfs寻找增广路,直至网络中不在存在增广路为止. 在每 ...

  2. 算法艺术——网络最大流

    女强人:http://blog.csdn.net/abcjennifer/article/details/5556455 USACO 4.2.1 Ditch 网络最大流问题算法小结 通过 USACO ...

  3. [转]带花树,Edmonds's matching algorithm,一般图最大匹配

    看了两篇博客,觉得写得不错,便收藏之.. 首先是第一篇,转自某Final牛 带花树--其实这个算法很容易理解,但是实现起来非常奇葩(至少对我而言). 除了wiki和amber的程序我找到的资料看着都不 ...

  4. 算法导论 CLRS 第26章 最大流 Maximum flow C#

    2021/11/26 第六部分 图算法 第22章 基本的图算法 图数据结构设计 出度.入度和度 有向图 出度≠入度 先初始化出度,再初始化入度,u.入度=u.AdjList.length-u.out_ ...

  5. 最大流三大算法——3,ISAP算法

    最大流背景介绍:比如城市水管,从水站运水送你家,许多管道总共能同时送多少水到 最大流分三个算法,算法难度与优越性逐步提升: 1,EK(Edmonds−Karp)算法 2,dinic算法 3,ISAP算 ...

  6. 网络流问题:最大流及其算法

    一.概念引入 首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和. 流网络G=(V,E)是一个有向图,其中每条边(u,v)∈E均有一个非负容量c(u,v)>=0.如 ...

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

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

  8. 如何判断飞机的年限_技术流带你鉴定前风挡玻璃更换,不再使用日期判断!

    ​ 这又是一篇关于前风挡玻璃鉴定的文章,我记得在二手车鉴定微信公众号里面已经发布好几篇这样的文章了,当然每篇文章的住重点不同,今天这一篇应该是完结篇,它们在一起能组成一套玻璃更换系列专题课程: 我们回 ...

  9. SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断

    什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...

最新文章

  1. 时隔这么长时间,又回来写博客了
  2. shell   脚本之 continue 与break的用法
  3. WPF ValidationRule的特点(默认目标-源才校验)
  4. 辨异 —— 冠词(定冠词、不定冠词、零冠词)
  5. 样条表示---Bezier样条曲线
  6. 童话世界区块宠物源码
  7. CentOS7配置rsync实现文件同步
  8. 深入分析MVC中通过IOC实现Controller依赖注入的原理
  9. Oracle认证(ocjp)通关之路
  10. 初识Vocaloid3
  11. 工业机器人pallet指令_工业机器人编程指令详解简介,目录书摘
  12. mac如何设置默认输入法
  13. stata中计算公式命令_stata 计算命令:
  14. chkdsk 后数据丢失的恢复方法chkdsk 后数据丢失的恢复方法
  15. 高德地图Amap常用功能总结
  16. phpstorm的使用方法
  17. ULC2平台CTA音频调试记
  18. 砂轮是刀具磨床加工表面粗糙度高的主要因素
  19. 离散数学(一):命题及命题联结词
  20. JavaScript阻塞与非阻塞

热门文章

  1. Windows 11 配置Java 环境变量
  2. linux系统宝塔安装nodejs,基于debian宝塔面板安装nodebb – 一款基于Node.js的论坛程序...
  3. 电脑视频怎么录制?好用的电脑录屏方法
  4. charles软件关闭后浏览器无法上网的问题
  5. 猿辅导python资源_2020猿辅导(小猿搜题)高中辅导全资源合集百度网盘下载
  6. uc浏览器黑莓java下载安装_(黑莓软件)黑莓最新版UC浏览器下载安装!8.1最新版UC浏览器!...
  7. Sqlmap中代理及其他常用参数
  8. flutter全屏背景图(包括appbar和状态栏)以及沉浸状态栏的设置
  9. 新一代 OIer 的快速入门命令行教程
  10. 服务器启动时创建文件夹,技术|entr:文件更改时重新运行构建