[知识点]网络流进阶之对偶图

一、前言

本文为上一篇文章《网络流基础》之续集,同样3年前已有一篇文章讲解转换对偶图,这里再次为其翻新一次,希望能够更好理解。

二、最小割

讲网络流不得不提一个概念——最小割。便于理解,上一篇文章并没有将其搅和进来。最小割是什么呢?现在要求割断部分路径上的流量,使从源点没有任何流量可以到达汇点,而截取的流量最小值即最小割。我们再次拿出上次的模型:

首先从1至4最直接的20流量必然需要截掉;从1至2理应截取40,但由于2-3-4路径上的最大流仅为10,加上2-4流量为20,故只需截取30;总计50流量。

看着看着就觉得有意思了——对于任意一条路径,其能够流通的流量最大值便是我们需要割掉的流量最小值,即最大流=最小割。

这里提及最小割的概念,能够更好的理解接下来的内容——转换对偶图。先看一道例题。

三、例题

原文地址:https://www.cnblogs.com/jinkun113/p/9495308.html

时间: 2024-11-15 06:50:17

[知识点]网络流进阶之对偶图的相关文章

[知识点]网络流之转换对偶图

// 此博文为迁移而来,写于2015年5月16日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w0d8.html 1.前言 先来说一个概念——最小割.最小割是什么呢?在网络流上,截去最小的流,使源点到汇点没有流量可以流通.仔细想想,其实就是最大能通过的流量.于是就能得到一个定理——最小割=最大流. 今天所讲的一种模型,是将平面图转换为对偶图,用最短路来求最小割.它的速度比起裸最小割(Dinic)更快(但是仅适用于网格

[知识点]网络流基础

1.前言 这是ACM之路的第一篇文章,是在通过看自己OI生涯的文章来回顾知识点的过程中,实在难以接受当时过于含糊笼统的介绍的情况下决定开写的,真是对不住1300+的阅读量了.由于网络流的EK算法和Dinic算法就是早期的知识点系列文章,当时确实疏漏很多,现在通过我目前残缺的知识框架和基本功重新整理一下. 网络流是一个很广泛的问题,是一种类比水流的解决方案.从算法角度来看,最常见的基础算法为Dinic算法,也是本文最重要的部分.从问题角度而言,对于算法竞赛,最常见的问题莫过于最大流问题.何为最大流

[知识点]网络流之Dinic算法

// 此博文为迁移而来,写于2014年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html 今天我们来谈谈网络流之Dinic算法.这种算法相比Edmond-Karp算法,更加快速,更加常用.还记得EK吗?每次为了防止流量堵塞,必须进行多次BFS/DFS,非常费时间.而Dinic大叔非常机智的发明了Dinic算法,让这个问题得以解决. Dinic的核心内容是:反复进行BFS绘制出层次图,和DFS进行

[知识点]网络流之Edmond-Karp算法

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

网络流进阶

先把三道例题扔在这里吧qvq 无源汇有上下界可行流 有源汇有上下界最大流 有源汇有上下界最小流 无源汇有上下界可行流 首先默认把下界跑满 但显然这样是不满足流量平衡的 所以建立超级源S,超级汇T 把所有"入不敷出"的点向T连一条大小为 出流-入流 的边 把S向所有入流大的点连一条大小为 入流-出流 的边 此时跑一遍网络流 如果与S相连的边都满流了 那么T也满流了 整个图即可行 否则不可行 #include <cstdio> #include <algorithm>

Python 进阶_生成器 &amp; 生成器表达式

目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & 列表解析 生成器 带有 yield 关键字的的函数在 Python 中被称之为 generator(生成器).Python 解释器会将带有 yield 关键字的函数视为一个 generator 来处理.一个函数或者子程序都只能 return 一次,但是一个生成器能暂停执行并返回一个中间的结果 -- 这就

程序员进阶架构师的必备——思维导图

架构师是什么?要做什么? 架构师?:是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.架构师不是一个人,他需要建立高效的体系,带领团队去攻城略地,在规定的时间内完成项目. 1 确认需求 架构师要懂得用户需求,理解用户真正想要什么,这使得架构师必须要和分析人员不断沟通,反复确认需求规格说明书,以此来保证他精准清楚用户需求. 「架构师会与很多人沟通,例如开发人员,例如项目经理,有时甚至是用户本身.架构设计的目的很明确,目的是什么呢?挖掘用户需求.」 2 系统分解

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

Java 8中如何使用ASM和JiteScript“烘焙”你自己的lambda

呃,Java字节码.我们已经在理解Java字节码一文中已经讨论过,但继续加深下记忆吧:Java字节码是源代码的二进制表示,JVM可以读取和执行字节码. 现在Java中广泛使用字节码库,尤其Java EE中普遍用到运行时的动态代理生成.字节码转换也是常见用例,比如支持AOP运行时织入切面,或JRebel等工具提供的可扩展类重载技术.在代码质量领域,常使用库解析和分析字节码. 如果要转换类字节码,有很多字节码库可供选择,其中最常用的有ASM,Javassist和BCEL.本文将简单介绍ASM和Jit