【算法?日更?第三十三期】网络流基础知识(最大流)

▎写在前面

  小编早就听说过了网络流这种神奇的东西,一直以为很高端大气上档次,但是很难,就没学。

  今日一见也不过如此,一点也不高端,不大气,不上档次。

▎网络流

?『定义』

  网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。网络流的理论和应用在不断发展,出现了具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。(copy自百度)

?『介绍』

  其实上面的度娘写的定义一点也不易懂,主要就是自来水问题:

  

  其中S是起点,T是终点,这是一个有向图,所以你会发现边都是有方向的。

  当然,每条边都是有权值的,也就是单位时间内的流量,S中有无限的水,但是不可能在单位时间内全部运送到终点T,此时的问题就是单位时间内最多能流过多少水,到达T?

  其实网络流问题只是一个大的标题,具体分下来有最大流,费用最小流等等,上面的问题就是最经典的最大流问题,当然,这篇博客也只会讲最大流。

?『专业名词』

  源点:S点就是源点,也就是我们刚才所说的起点。

  汇点:T点是汇点,正如其名,是流所交汇的地方。

  容量:每条边的权值就是这条边的容量。

?『一些规则』

  容量限制:一条边流过的量不可能超过它的容量。

  斜对称:一条边(u,v)的容量等于这条边反过来的容量的相反值。比如说这条边容量是正1000,虽然它的反向边不存在,但是我们把它认为是负1000。

  流守恒:就是说一个点流入多少,那么就会流出多少。(除了源点和汇点)

▎操作:增广

  增广是最大流求解的基础操作。

  比如说这是我们的图:

  

  刚开始的时候要维护反向边,初始为0,所以就先不画出来,我们先进行搜索,找到T。

  

  其中最短的边长为3,那么这条边的边长全部减去3,同时反向边都加三,最大流增加3。

  然后就是这个样子的:

  

  就这样一直反复操作下去,直到到不了T,此时加起来的值就是最大流。

原文地址:https://www.cnblogs.com/TFLS-gzr/p/11298156.html

时间: 2024-11-05 22:49:31

【算法?日更?第三十三期】网络流基础知识(最大流)的相关文章

【算法?日更?第五十期】二分图(km算法)

▎前言 戳开这个链接看看,惊不惊喜,意不意外?传送门. 没想到我的博客竟然被别人据为己有了,还没办法投诉. 这年头写个博客太难了~~~ 之前小编写过了二分图的一些基础知识和匈牙利算法,今天来讲一讲km算法,若你不知道匈牙利算法,请先看下面的博客.(否则会体验极差) 传送门 ▎km算法 ?『引入』 之前学习的匈牙利算法还记得吗?它处理的是无权二分图,长这个样子: //mspaint画出来的真粗糙 但是如果加入了权值呢?比如说是这个样子的: 现在,我们的问题变了,不再求最大匹配问题了,而是最优匹配问

【算法?日更?第五十六期】扩展欧几里得算法

▎裴蜀定理 这个定理很简洁,就是关于x,y(都是整数)的不定方程在下面的情况下: 必定有解. 这只是个前置知识,就不证明了(主要是小编太菜). ▎不定方程 考虑方程ax+by=c的解的情况: 若c=gcd(a,b),那么依照裴蜀定理有解: 若c=k*gcd(a,b),先两边同除k,就会转化成标准形式,有解: 若c与gcd(a,b)互质,那么无解: 所以问题就是: 如何解决,只要解决了这个问题,所有解的情况就解决了. ▎问题解决 现在我们考虑怎么让这个问题更简单,思考这样一个问题,已知: 的解(x

【算法?日更?第二十五期】万能算法(一):搜索+?

▎前言 看到这个标题,你是不是倍感疑惑,为什么会是搜索+,而不是搜索,会不会是小编打错的,其实本篇博客将会让你看到搜索的各种玩法. ▎前置技能 ?『基础知识』 搜索:dfs和bfs(戳这里迅速上手). ?『dfs和bfs的异同点』 相同点:dfs和bfs都用于搜索,都是来寻找点的. 不同点:dfs以深度为优先,不撞南墙不回头,一鼓作气搜遍一条路,所以比较不靠谱,但是代码量少,也好写,大部分人都喜欢用.而bfs则是以广度为优先,逐层遍历,相比dfs来说更加理性,但是当状态不好存储时,就只能用dfs

OSChina 开源周刊第三十三期 —— Node.js 和 io.js 准备合作!

每周技术抢先看,总有你想要的! 开源资讯 Node.js 和 io.js 准备合作!合久必分,分久必合? Nervana 开源深度学习软件,性能超 Facebook.Nvidia产品 B 站建开源工作组 多 APP 使用其开源项目 Android 新开发技术 Sky:Dart 开发 Android 应用 谷歌红帽及 VMware 宣布支持 CoreOS 容器 Oracle 宣布 Java 7 生命周期终结 Java 9 公布发行计划,明年 9 月发布正式版 IO.js 2.0.0 发布,服务器

【算法?日更?第二十期】构造分治

▎什么是分治? ?『定义』 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.在计算机科学中,分治法就是运用分治思想的一种很重要的算法.分治法是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等等.(copy自百度) 一句话总结:分治就是把大问题转化成若干小问题,小问题解决后,大问题自然就迎刃而解. ?『使用条件』 ①大问题分解成

【算法?日更?第二十六期】非常基础的数论

一说到基础数论,那么我们就从整除那套理论开始谈起. ▎整除 ?『定义』 如果a能把b整除,也就是没有余数,则我们称a整除b,亦称b被a整除,记为a|b. 其中的“|”称为整除符号. ?『性质』 ①自反性:显然,对于任意正整数n,有n|n: ②传递性:若有a|b,b|c,则有a|c: ③反对称性:若a|b,b|a,则有a=b: 其中性质③很有用,通常用于无法直接证明a=b的情况,不过用到的少. ▎约数和倍数 ?『定义』 如果a|b,那么a是b的约数,b是a的倍数,也称a是b的因数/因子. ?『推论

Android Studio第三十三期 - 蓝牙开发初识~

遇见到坑爹的队友只有接受现实并且解决问题~ 首先介绍一下网上几乎所有的能搜到的方法: 1.首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" /> 2.在androi

三十三期百度技术沙龙笔记整理

此次技术沙龙是由百度的高级架构师陈天健和豆瓣首席科学家王守崑为主讲,大主题是推荐系统. 陈天健的主要话题是百度推荐引擎计算平台架构中的流式计算架构.中间有一种因为几个短信有点错过,等视频出来再听一遍,这个笔记基本没啥整理,主要是个备档,感兴趣的同学可以直接去InfoQ看视频.下面把记的笔记抄上来: NLP---当前分析热点: 传统架构以Hadoop为主,流式计算加速数据处理: QueueWorker: 流式计算系统,拓扑S4.DAG: 多样索引 及时计算获得用户访问成倍增长. 整个工程引擎化--

分布式技术追踪 2017年第三十三期

分布式系统实践 1. 生活中的Paxos,原来你我都在使用--对Paxos生活化的解读 http://hedengcheng.com/?p=970 摘要: 很通俗的介绍Paxos的文章, 推荐大家看看. 2. 一文读懂Apache Kudu http://dwz.cn/6o5asK 摘要: 关于Kudu的文章之前也分享过, 这篇文章帮助大家回顾Kudu的设计思路和理念. 微服务技术 1. 为什么Google上十亿行代码都放在同一个仓库里? http://dwz.cn/6oy3SK 摘要: 相对于