Text
给出一个无向图,要求两两之间最小割
最小割树可以只用跑N最小割来求出两两之间的
我们有定理 mincut(a,b)≥min(mincut(a,c1),mincut(c1,c2),...,mincut(cm,b))
证明可以先考虑三个点a,c,b的情况,然后再推广,此处不再赘述
最小割树上的一条边的边权就是这两个端点之间的最小割
最小割树的性质就是两个点x,y的最小割等于在最小割树上x到y的路径边权最小值
那么如何构造这棵树呢
一开始所有点在一个块中,每次在一个块里随便找两个点S,T,跑这两个点的最小割,那么最小割割出来两个集合S集、T集,S集中在这个块内的点分成新的一块,T集中在这个块内的点也分出一块,相当于每次把一个块分成两块,然后再用一条边权为最小割的边连接S和T(在最小割树上),然后递归这两块
注意此处的块和最小割树和原图都是互相独立的
这个构造相当于一个分治的过程
那么每次分出来的两块,根据上面的定理,都可以通过先到这次的S,再到T
然后两边的部分再分治下去处理
为什么这样可以?
我们可以倒过来考虑,假设我们已经求出了所有点两两之间的最小割,来构出这个最小割树
相当于给出了完全图,要求这样一个生成树,使得生成树上任意两个点之间的边最小值等于这原图中这两个点直连边的边权
那么就是这个图的最大生成树
为什么呢?
考虑新加入一条边
如果这条边连接的两个点已经连接了,那么这条边的边权是小于等于之前所有边的
又根据上面的定理
那么他又需要满足这条边的边权大于等于这条路径上的边权最小值
那么就是等于了
从这可以发现,两两之间最小割最多只有n-1种
那么刚才的分治过程也是正确的了