无源汇上下界可行流

注意这里给的有向图不是一个网络,因为是没有源点汇点的;相当于就是构造一个流函数f(定义域是每条边),使其满足流量守恒和容量限制

我们没学过有下界的一般图的最大流算法,所以这里尝试转化成无下界的网络最大流算法;也就是说对于原图G,我们要构造一个新网络G1,使得G的一个可行流f可以与G1中的一个可行流一一对应,如果能够成功构造,我们求解G1的最大流就是原图的一个可行流;这样做肯定有问题,因为显然G可能是无解的,而G1一定是有解的,所以不可能做到一一对应,也就是说对于G1的一个可行流可能无法在G中找到一个可行流对应(因为无解),于是猜测G1的可行流集合大于G的可行流集合,所以我们换一种对应方法,尝试将G的可行流与G1最大流一一对应(因为G1的可行流集合也一定大于G1的最大流集合);对应成功后,求解G1的最大流就是G的可行流

对于G的一个可行流f,有min(u,v)f(u,v)max(u,v),由于下界要变成0,所以写成0f(u,v)min(u,v)max(u,v)min(u,v);于是一个naive的想法就是对于G1的每条边(u,v)的容量限制限制为max(u,v)min(u,v)就行了;但是这样会有一个问题,这样子设置就会导致不知道G1的源点汇点是干嘛的,而且好像与我们上面分析的"G的可行流与G1的最大流一一对应"没有什么关系,并且G1求解的最大流对应回G后,G不一定满足流量守恒;分析一下为什么不满足流量守恒,设in[x]=uVmin(u,x),out[x]=uVmin(x,u),那么当in[x]>out[x]的时候,我们从G1对应回G的时候,进入x的流量增加的量会多与从x出去的流量增加的量,而在G1中,进入x的流量等于x出去的流量,这就会导致G中流量不守恒(in[x]<out[x]同理分析);于是我们要想办法减少G1中进入x的流量,让其最开始就小于从x出去的流量,然后对应回去的时候就满足流量守恒了;这个时候就要让源点汇点干事情了,如果in[x]>out[x],那么在G1中连接边(s,x),权值为in[x]out[x],如果in[x]<out[x],那么在G1中连接边(x,t),权值为out[x]in[x];此时再对G1跑最大流,如果G1的最大流等于s出边的权值之和,那么就说明G有可行流,对应回去就可以了(如果G1的最大流等于s出边的权值之和的话,G的任意一个可行流也可以对应到G1的最大流),否则说明G无解(如果有解的话,对应过来显然是G1的一个流,而且这个流是等于s出边的权值之和,而G1的最大流不会超过s出边的权值之和,这就与G1的最大流不等于s出边的权值之和矛盾)

posted @   最爱丁珰  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2023-09-03 Miller Rabin与Pollard Rho
2021-09-03 墨墨的等式【同余最短路模板题】
点击右上角即可分享
微信分享提示