// 此博文为迁移而来,写于2015年2月2日,不代表本人现在的观点与看法。原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vr12.html
 
UPDATE(20180805):这是一篇未加反向弧的错误博文。请移步至:https://www.cnblogs.com/jinkun113/p/9427825.html
       
       今天我们来讲一讲网络流。想当年的“网络流大神”的称号记忆犹新。
       网络流,顾名思义,在网络上流。它的算法:Edmond-Karp算法,Dinic算法。首先我们来介绍一下Edmond-Karp算法,他的速度很慢,但是比较好理解,并且代码简单一些,一些大神都直接忽视掉这个老爷速度的算法了 = =。
       网络流是什么呢?我们先看一个很简单的样本例题——

1993 草地排水

题目描述 Description

在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。

农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。

根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。

输入描述 Input Description

第1行: 两个用空格分开的整数N (0 <= N <= 200) 和 M (2 <= M <= 200)。N是农夫John已经挖好的排水沟的数量,M是排水沟交叉点的数量。交点1是水潭,交点M是小溪。

第二行到第N+1行: 每行有三个整数,Si, Ei, 和 Ci。Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。

输出描述 Output Description

输出一个整数,即排水的最大流量。

样例输入 Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
样例输出 Sample Output

50

应该很好理解吧?在一张图上(或者是一个网络上),有一个源点,一个汇点。源点汇点之间有若干条路线以及中转站,每条路线有已知的最大流量。求源点到汇点有多少流量?
先要引入一个概念——增广路。增广路,即从源点到汇点的道路。Edmond-Karp的原理在于,依次寻找所有增广路,求出这条路上每条子路的最大流量的最小值,并且将这条路上的所有现有流量增加这么多的流量。最后所有情况下的增加的流量就是答案。
可能说的比较模糊,可以通过我简明扼要高端大气的代码来理解:
 
Code:

 
UPDATE:但是这个算法貌似有问题= =,江哥说要加反向弧,可是网上都没有加。。好吧下次我们来讨论更厉害更常用更快速的Dinic算法,这个大概了解一下就行了。

最新文章

  1. react通过自己的jsx语法将两者放在一起通过虚拟dom来渲染
  2. CentOS常用的文件操作命令
  3. STM32F0xx_FLASH编程(片内)配置详细过程
  4. Gradle Goodness: Continue Build Even with Failed Tasks
  5. MTD应用学习:mtd和mtdblock的区别
  6. BFS visit tree
  7. live555 RTSP服务器建立及消息处理流程
  8. C代码分析器(一个 公开赛冠军)
  9. 为Android设备添加A2SD支持
  10. 集合(list、set和map)区别
  11. springboot+mybatis-puls利用swagger构建api文档
  12. 推介一个学习JAVA的系列教程-狗鱼IT教程
  13. NEO区块链-DAPP开发直通车-第零篇
  14. Re:uxul
  15. bzoj3672/luogu2305 购票 (运用点分治思想的树上cdq分治+斜率优化dp)
  16. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列
  17. float与double的范围和精度以及大小非零比较
  18. java基础解析系列(一)---String、StringBuffer、StringBuilder
  19. CentOS系统下的数据盘挂载
  20. 使用Apache Kylin搭建企业级开源大数据分析平台

热门文章

  1. layui.dropdown.js
  2. Java 中要将 String 类型转化为 int 类型
  3. 《 .NET并发编程实战》阅读指南 - 第9章
  4. 【LeetCode】230. Kth Smallest Element in a BST
  5. layui提示框事件
  6. WPF 时间编辑控件的实现(TimeEditer)
  7. JVM:带你查看常见的问题,以及分析处方法
  8. python类的实例化
  9. Flask中request与response参数
  10. Spring扩展点之BeanPostProcessor