首页 > 其他分享 >上下界 可行/最大/最小 网络流/费用流(有/无源汇)

上下界 可行/最大/最小 网络流/费用流(有/无源汇)

时间:2024-02-01 15:16:12浏览次数:20  
标签:可行 网络 流量 下界 无源汇 汇点 汇上

对网络的定义进行扩展,我们可以得出一堆奇奇怪怪的网络。

上下界

令 \(Max_e\) 为边 \(e\) 的流量上界,\(Min_e\) 为边 \(e\) 的流量下界,一条边的流量 \(f_e\) 要满足 \(Min_e \le f_e \le Max_e\),除此之外和普通网络流定义相同,可以发现,普通的网络就是下界为 \(0\) 的网络。

无源汇

顾名思义,如果抛弃源汇点的设定,对每一个点,都要满足流量守恒,即入流等于出流,那么这就是无源汇的网络流。

有源汇的网络可以通过添加 \(T \rightarrow S\),下界为 \(0\),上界为 \(INF\) 的边,变成无源汇网络。

这是一张无源汇上下界网络。

解决扩展网络流的核心就是:转化为普通网络流问题。

无源汇上下界可行流

这个模版是之后的基础,我们也借此来探究如何将带下界的网络流转化成普通的(下界为0)网络流。

首先,每一条边得流满下界,我们就让网络的流量为下界。得到一张下界网络

但是这个下界网络很可能不满足流量守恒(如果守恒,就结束了),所以我们在原图的基础上,令流量上限为 \(Max_e -Min_e\),得到一张增量网络。通过对增量网络的调整,来让下界网络+增量网络达到平衡。

如果在下界网络中,一个点入流大于出流,说明在增量网络中这个点需要补偿出流,出流 > 入流,那么就需要超级源点提供入流来平衡。具体提供的入流是,这个点在下界网络中的出入流量差。(这段话可能有点绕,但还是可以形象理解的)。同理,出流大于入流,向超级汇点连边。

总的来说,差量网络中缺什么,增量网络中补什么,通过源汇点反方向的补偿来达到增量网络平衡。

形式化地讲,设 \(Deg_i=In_i-Out_i\)(下界网络中)。并令 \(Max_e-Min_e\) 为增量网络中每条边的容量。

若 \(Deg_i>0\),则 \(S \rightarrow i\),容量为 \(Deg_i\)。

若 \(Deg_i<0\),则 \(i \rightarrow T\),容量为 \(-Deg_i\)。

在这样一张增量网络中跑最大流,如果每条新增边(连接超级源汇店的边)达到满流,说明原问题存在可行流,反之不存在。

为什么不求具体流量?为什么没有最大流?因为每一个点流量都不一样啊()。

有源汇上下界可行流

这个就很简单了吧,\(t \rightarrow s\) 连一条 \(INF\) 边,就是上面的问题了。而且我们还能得出可行流的流量是 \(t \rightarrow s\) 边上的流量。

注意这里要分清楚原来的源汇点,和新建的超级源汇点。\(s,t\) 是原网络中的源汇点,\(S,T\) 是为了解决无源汇问题新增的超级源汇点,\(s,t\) 加边后,它们就是普通的结点了。

有源汇上下界最大流

我们先跑出一条可行流,然后撤掉 \(t \rightarrow s\) 的边,以 \(s,t\) 为源汇点,再跑一遍最大流。把可行流和最大流相加。

这个原理也很好理解,计算出可行流后原网络相当于最大流算法里的残量网络,直接在它上面跑就可以。

\(S,T\) 连的边不用撤,因为它们的边已经满流,不会产生影响。

有源汇上下界最小流

这个就很玄学精妙,和最大流一样,只不过从 \(t\) 点开始跑最大流,然后可行流减去最大流。这个操作其实是让原网络的反图达到最大流(还记得网络流中是有反向边的吧)。原图自然最小了。

好了,上下界的网络流基本介绍完了,还有费用流,其实万变不离其宗。

无源汇上下界最小/大费用可行流

是在太帅了这个标题。其实很简单啦,把下界网络中的费用一算,然后在增量网络中跑费用流就行了,注意超级源汇点连的边费用为 \(0\),因为它们的流本质是补偿下界网络,这部分已经算过了。

其他也是一模一样,把所有最大流改成费用流就行了,所以真的很简单啊。(就是模版容易打错)

标签:可行,网络,流量,下界,无源汇,汇点,汇上
From: https://www.cnblogs.com/Uuuuuur/p/18001252

相关文章

  • 不搜索,无问题。冗余、上下界剪枝
    公众号:编程驿站1.搜索算法本文和大家聊聊搜索算法,计算机解决问题的抽象流程是,先搜索,或完全搜索后得到答案,或边搜索边找答案。所以,对给定的数据集进行搜索是解决问题的前置条件。不搜索,无问题。搜索算法无非就是线性、二分、深度、广度搜索算法。其它的搜索算法的底层逻辑也是建......
  • 软件可行性分析报告
    ......
  • CMake链接DLL可行实践
    DLL作为Windows下的动态库格式,其同Linux等平台的动态库稍有不同,比如对MSVC编译器需要导出符号等。本文简述一种情况,即仅有dll文件及对应头文件时应当如何在CMake中完成链接。首先必须提示的一点是,DLL文件是程序运行时会调用的文件。编译器在编译链接时并不关心DLL文件在哪,而是会......
  • 刚来实习就跑路,可行么?
    最近编程导航的一位鱼友问了个让我血压升高的问题:鱼友提问鱼皮你好,我投了两周简历,然后昨天面了一个小厂的远程实习并且拿到了offer,我要不要试试呢?我在顾虑比如我如果在远程实习期间找到一个中厂或者大厂的实习,然后我肯定就会去这个新的厂。但是上周刚来下周就走的这种情况真的没......
  • 二级交错指数时间的电路下界
    \(\newcommand{\NP}{\mathsf{NP}}\newcommand{\PP}{\mathsf{P}}\newcommand{\PPoly}{\mathsf{P/_{poly}}}\newcommand{\EXPSPACE}{\mathsf{EXPSPACE}}\newcommand{\SigmaTwo}{\mathsf{\Sigma_2}}\newcommand{\E}{\mathsf{E}}\newcommand{\F......
  • 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、
    @目录前言1.需求分析2.可行性分析2.1简介2.2技术可行性分析2.2.1技术实现方案2.2.2开发人员技能要求2.2.3可行性2.3操作可行性分析2.4结论3.项目报告3.1修订历史记录3.2软硬件环境3.3需求分析3.4详细设计3.4.1类设计3.4.2核心流程描述3.4.3核心算法设计3.5运行......
  • 抽奖系统的部署(实验可行)
    以Windows10为例1.node安装最新版Node下载Node.js,一直下一步->安装完毕验证2.程序压缩包下载&解压lotterycdlottery#服务端插件安装cdservernpminstall#前端插件安装cd../productnpminstall#打包-这一步的时候出现了报错#Error:error:0308010C:digita......
  • 二分图最大匹配的必须边和可行边
    以下考虑完备匹配(非完备匹配要用到网络流)给定一张二分图,其最大匹配方案不一定是唯一的。若任何一个最大匹配方案的匹配边都包括\((x,y)\),则称\((x,y)\)为二分图匹配的必须边。若\((x,y)\)至少属于一个最大匹配的方案,则称\((x,y)\)为二分图匹配的可行边以下证明假设我们已经求出......
  • Navicat Premium 16 安装并激活图文教程(亲测可行)
    NavicatPremium16安装并激活图文教程(亲测可行)写在前面:网上的po_jie套路很雷同,但是目前官网下载的NavicatPremium16软件包已经修复了永久激活的bug(网上流传的激活方式不行了),这里提供未更新前的软件安装包(可以永久激活)。一、下载安装包navicat161_premium_cs_x64.exe:ht......
  • 项目章程的作用是什么,项目可行性研究包括哪些
    项目章程的作用包括:①确定项目经理,规定项目经理的权力②正式确认项目的存在,给项目一个合法的地位③规定项目的总体目标,包括范围、时间、成本和质量等。④通过叙述启动项目的理由,把项目与执行组织的日常经营运作及战略计划等联系起来可行性研究包括:1.投资必要性论证项目投资建设的必......