无源汇上下界可行流

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值