带下界的网络流和费用流

本文介绍了带下界的网络流和费用流的概念,包括如何构建新的网络以确保下界流量得以满足。通过超级源和超级汇的引入,解释了如何判断是否存在可行流。同时,讨论了最大可行流、最小可行流的计算方法,以及在求解最小费用最大可行流时的处理策略。最后,给出了一个实际问题的应用示例。
摘要由CSDN通过智能技术生成

所谓带下界的网络流和费用流,就是对于网络流和费用流模型的一些边,除了有容量之外,还有流量下界的限制,即这条边至少要流过下界这么多的流量。

在下文中,用x->y:[l,r]表示网络流模型中一条x连向y,容量为r,下界为l的边;用x->y:[l,r],c表示费用流模型中一条x连向y,容量为r,下界为l,费用为c的边。如果没有下界,则把[l,r]改为w。无穷大为INFI。源和汇分别为S和T。


1、带下界的可行流

这方面的论文好像有不少,做法大致有两种。一种是基于二分的,这种我还不清楚,有兴趣的自己去搜搜看吧……另一种就是重新构图的方法。

新建超级源S_和超级汇T_(本想叫S'和T'的,但发现看不清……)。连边:T->S:INFI。对于每条有下界的边x->y:[l,r],连边:S_->y:l、x->T_:l、x->y:r-l。求从S_到T_的最大流,如果S_的每条出边都满流,那么就存在可行流。

下面我们来说明这个构图方法的正确性。这个构图的思路是,强制让所有下界满流。如果我们直接让所有有下界的边的流量都达到了下界,这时候流量平衡条件会被破坏,那么我们就需要“补”一些流量。假设整个模型中只有一条边x->y:[l,r]有下界,那么我们让它的流量达到下界,此时y会多出l的流量需要流走,而x会有l的流量需要流入。注意我们是无法直接让这条边的流量达到下界的,那么我们就建超级源和超级汇来提供这些流量。所以就有S_->y:l、x->T_:l。但是这样y还是没法流到x,所以再连T->S:INFI,这样原来的源和汇就变成了满足流量平衡的普通节点。

我们可以这么理解:如果一条边x->y:[l,r]的下界可以被满足,那么从y到汇一定存在增广路可以流掉这l的流量,同样从源到x也一定存在这样的增广路。那么按照这个方法构图就可以求出是否存在这种增广路。

而为了保证下界不会被退流,原来x->y:[l,r]的边就被改成了x->y:r-l。


2、最大可行流

无论是求最大还是最小可行流,都是在求完可行流的残量网络上操作的。网络流模型的最大可行流即残量网络上原来的源到汇的最大流。

我们先不管T->S的边退回的流量。这样残量网络就是一个满足所有下界的网络,而且下界不会退流。那么在这个网络上求最大流得到的一定是除开下界产生的流量的的最大可行流。

那么下界的流量呢?事实上就是沿T->S流的流量,也就是T->S被退回的流量。如果可行流的流量没有经过T->S的边,那么就一定是流到了某个直接和T_相连的点,就直接流到T_了。在最初的模型中,也即从源出发的流量在流到汇之前经过了这两条边,也就只会计算一次流量。所以下界产生的流量实际上也就是T->S的流量。

这个方法是可以构造方案的。


3、最小可行流

网络流模型的最小可行流即T->S边的流量,减去,删去T->S的边后,从T到S的最大流。

为什么最小可行流不直接是T->S的流量?因为图中可能会存在从S到T再回到S的循环流。我们可以用管道的模型来比喻。一根管道的流量即每单位时间通过的水量,最大流也即源点每单位时间要供出去的水量。而对于一个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值