最小割
最小割实在是个神奇不过的东西。
尽管对于一个有源汇的流网络来说,最小割=最大流。但是最小割的应用远比最大流广,也更神奇。
(其实有一些东西还没完全搞懂。。。先放这儿)
下面介绍几个最小割相关的东西:
1.常识
割边一定满流。
2.实际意义:
连边(u,v,w)代表如果u在s割,v在t割需要付出代价w。但注意,如果u在t割,v在s割是不需要付出代价的。
那么如果连边(u,v,w)以及(v,u,w)则说明当u与v所属割不同的时候需要付出代价w。
特别的,如果我们连边(s,u,inf)表示u必须属于s割。因为inf边是不会满流的,所以不是割边,所以u属于s割。连边(v,t,inf)同理。
3.方案
在残量网络中由s经非满流边bfs到的点一定属于s割。
在残量网络中由t经非满流边bfs到的点一定属于t割。
剩下的点呢?可不确定。。。(我也不知道这句什么意思。。。,难道是属于s割或t割都不会影响最小割的大小?)
所以当没有剩下的点的时候最小割方案唯一,否则不唯一。
这里证明待补。
4.可行边,必须边。
先求一遍最小割。
需要注意,此时的割边一定满流,但满流边不一定是割边。
可行边就是在某个最小割中作为割边。
必须边就是在任意最小割中作为割边。
首先可行边必须在刚刚这个网络里是满流的。
证明:
{
不妨设该边为(u,v,w)。它没有满流。
它是可行边等价于它可以在某个最小割中作为割边,那我们强制使它成为割边,具体实现为连边(s,u,inf),(u,t,inf)
那么再求最小割,这条边一定是割边,然后如果最小割的容量没有变化说明我们已经构造性的证明了它的可行性。
如果该边没有满流,我们连了两条边之后就多了一条增广路!!!最小割显然增大了,所以非满流边一定不是可行边。
}
那么满流边一定是可行边?不一定。
在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号。显然有id[s]!=id[t](否则s到t有通路,能继续增广)。
①对于任意一条满流边(u,v),(u,v)能够出现在某个最小割集中,当且仅当id[u]!=id[v];
证明:
{
如果id[u]==id[v],那么残量网络中存在u到v的通路,如果我们加上上面的两条边,一定会多出这个通路的流量。
最小割发生改变。所以不能是割边。
充分性类似可证。
}
②对于任意一条满流边(u,v),(u,v)必定出现在最小割集中,当且仅当id[u]==id[s]且id[v]==id[t]。
证明:
{
考虑反面,如果存在一个最小割方案使得(u,v)不是割边。那么不妨认为u和v同属s割。
我们加大这条边的容量,最小割的容量是一定会增大的,因为出现了增广路。
但如果它不是割边的话它的容量的增大是不会影响到最小割容量的。矛盾!
}