无源汇上下界可行流
注意这里给的有向图不是一个网络,因为是没有源点汇点的;相当于就是构造一个流函数\(f\)(定义域是每条边),使其满足流量守恒和容量限制
我们没学过有下界的一般图的最大流算法,所以这里尝试转化成无下界的网络最大流算法;也就是说对于原图\(G\),我们要构造一个新网络\(G_1\),使得\(G\)的一个可行流\(f\)可以与\(G_1\)中的一个可行流一一对应,如果能够成功构造,我们求解\(G_1\)的最大流就是原图的一个可行流;这样做肯定有问题,因为显然\(G\)可能是无解的,而\(G_1\)一定是有解的,所以不可能做到一一对应,也就是说对于\(G_1\)的一个可行流可能无法在\(G\)中找到一个可行流对应(因为无解),于是猜测\(G_1\)的可行流集合大于\(G\)的可行流集合,所以我们换一种对应方法,尝试将\(G\)的可行流与\(G_1\)的最大流一一对应(因为\(G_1\)的可行流集合也一定大于\(G_1\)的最大流集合);对应成功后,求解\(G_1\)的最大流就是\(G\)的可行流
对于\(G\)的一个可行流\(f\),有\(\min(u,v)\leq f(u,v)\leq \max(u,v)\),由于下界要变成\(0\),所以写成\(0\leq f(u,v)-\min(u,v)\leq \max(u,v)-\min(u,v)\);于是一个naive的想法就是对于\(G_1\)的每条边\((u,v)\)的容量限制限制为\(\max(u,v)-\min(u,v)\)就行了;但是这样会有一个问题,这样子设置就会导致不知道\(G_1\)的源点汇点是干嘛的,而且好像与我们上面分析的"\(G\)的可行流与\(G_1\)的最大流一一对应"没有什么关系,并且\(G_1\)求解的最大流对应回\(G\)后,\(G\)不一定满足流量守恒;分析一下为什么不满足流量守恒,设\(in[x]=\underset{u∈V}{\sum}\min(u,x),out[x]=\underset{u∈V}{\sum}\min(x,u)\),那么当\(in[x]>out[x]\)的时候,我们从\(G_1\)对应回\(G\)的时候,进入\(x\)的流量增加的量会多与从\(x\)出去的流量增加的量,而在\(G_1\)中,进入\(x\)的流量等于\(x\)出去的流量,这就会导致\(G\)中流量不守恒(\(in[x]<out[x]\)同理分析);于是我们要想办法减少\(G_1\)中进入\(x\)的流量,让其最开始就小于从\(x\)出去的流量,然后对应回去的时候就满足流量守恒了;这个时候就要让源点汇点干事情了,如果\(in[x]>out[x]\),那么在\(G_1\)中连接边\((s,x)\),权值为\(in[x]-out[x]\),如果\(in[x]<out[x]\),那么在\(G_1\)中连接边\((x,t)\),权值为\(out[x]-in[x]\);此时再对\(G_1\)跑最大流,如果\(G_1\)的最大流等于\(s\)出边的权值之和,那么就说明\(G\)有可行流,对应回去就可以了(如果\(G_1\)的最大流等于\(s\)出边的权值之和的话,\(G\)的任意一个可行流也可以对应到\(G_1\)的最大流),否则说明\(G\)无解(如果有解的话,对应过来显然是\(G_1\)的一个流,而且这个流是等于\(s\)出边的权值之和,而\(G_1\)的最大流不会超过\(s\)出边的权值之和,这就与\(G_1\)的最大流不等于\(s\)出边的权值之和矛盾)

浙公网安备 33010602011771号