网络流学习笔记
前言
因为网络流非常的重要,并且之前的理解都比较模糊,模板什么的整理的也不全,所以写一篇博客用来整理网络流的知识。也是供自己复习使用。
一些基本的定义
-
流量:
表示一条从u到v的边流过的水(当然,不一定真是水,只是流过的东西)是多少 -
容量:
表示一条u到v的边的最大流量是多少 -
源点,汇点:源点通常用s表示,其没有入边,汇点通常用t表示,其没有出边
-
斜对称性:
。所以反悔边每次就是加上当前边本次的流量 -
流量守恒:除了源点汇点,其他点进入的与出去的流量是相等的
-
剩余流量:一条边的容量减去当前的流量后剩余的容量,即
-
增广路:存在一条从源点到汇点的路径,并且这条路径上剩余流量的最小值非负,即存在增广路
-
最大流:使当前图不再有增广路,此图源点出去的流量之和即为最大流量
-
最小割:将一张图分成S,T两个子图,并且
,他的割为 。最小割即为让这个值最小
大致思路
网络流,其实就是一种在图上的带悔贪心,网络流有很多种做法,这里主要介绍dinic算法。
在网络流中,最重要的就是反悔边的存在,因为如果每次直接搜,很有可能因为选的边不好,导致不是最大流量。但如果加上反悔边的话,就等于我们会考虑所有的情况,所以最终一定可以搜出最大值。但是对于证明我不是很会,且网络流的考点也是在建模上,所以就不给出证明了。
对于dinic算法,我们的做法是先做一遍bfs,同时将这个图分层。然后,再对这个分层图dfs找增广路就可以了。
bfs部分:我们从汇点开始,除汇点外的点层数都设成inf,然后将汇点加入队列做bfs。每次从队列中取出一个点,对于他所有剩余流量大于0的并且还没被bfs过的点,更新他的层数为当前点的层数加1,然后丢入队列中。最后,只要汇点层数被更新过,就说明还有增广路。
点击查看代码
dfs部分:如果有增广路,从汇点开始,因为分了层,每次只会往下一层的走。并在递归的时候记录这条路径上的最小流量,如果到了汇点就return这个最小流量。如果回溯的时候流量大于0,就把这条路径上的边都减去这个流量就可以了。
点击查看代码
最小割
割去一些边,使得
定理:最小割=最大流
证明:显然,最小割不会小于最大流,不然最大流会变小。而假设最小割大于最大流,那么根据定义,前面的所有子图的最小割一定大于最大流,那么最大流就会变大,所以最大流一定等于最小割。
应用:最小割可以用来解决一些互相依赖与排斥的问题。如果一个问题可以转化为二分图的话,从源点向左侧点连他们权值的边,左侧点向他排斥的点连inf边,右侧的点向汇点连他权值的边。根据最小割的定义,肯定会割去左侧或右侧的边,因为中间的边为inf,肯定不会割掉。为了使s,t互不联通,要么割去他自己的边,要么割去与他排斥的边,所以一个点与他互相排斥的点只会选一个,而被割去左侧的边,就等于割去左侧的点,割去右侧的边,就等于割去右侧的点。
所以,最小割可以用来解决一些点(或实际的东西)之间选择有排斥或依赖关系的问题。
最小点覆盖
用最少的点使得所有的边至少有一个点在被选中的点集中。
定理:最小点覆盖=最大匹配
证明:因为求出最大匹配后,不会有变两个点都未被选择。且剩余的边也不会出现x(因为有x显然会有更大的匹配),所以只要对于每个边,选出其中少的那一边就可以了。
最大独立集
选出最多的点,使得这些点之间两两没有边链接
定理:最大全独立集=点数-最小点覆盖
证明:因为点覆盖就等于包括了所有边,只要删去所有点覆盖的点,就等于删去了所有的边,就是独立集了。
最小路径覆盖
定理:最小路径覆盖等于拆点后原点数减去最大匹配
证明:将一个点拆成出点入点后,跑最大匹配的话,一条边备选等于选择这条边,显然每个点的入点只会用一次,所以不会有相交的路径。而每选一条边就可以少选一个点,显然这然就是最小路径覆盖了。
应用:魔术球问题 。这个题可以把要求转换成将满足要求的点连边,选出最少的路径(就对应了柱子)覆盖了所有的点。
所有,最小路径覆盖可以解决一些点(或一些实际的东西)相邻之间有选择的限制条件,你需要将他们分成不同的组,最小能分成多少组。
网络流的一些心得
-
网络流是一种贪心的动态分配的过程
-
网络流大的来说就是将一些实际的限制转化成图上有关的问题。如流量可以限制上限,按一定的规则连边可以处理两点之间的关系等。
-
对于网络流的题目,通常就是将其转化成图后,在做上述的一些网络流的操作。所以通常也可以从这些操作的定义入手,去思考网络流该如何建图转换。
__EOF__

本文链接:https://www.cnblogs.com/shadom/p/17552193.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具