最大流/最小割树/等价流树 学习笔记
最大流/最小割树/等价流树 学习笔记
最小割树 $\text{Gomory-Hu Tree}$
前置
约定无向图点数为$n$,边数为$m$
割:断开一些边,使得$s,t$两点不连通
设$\lambda(u,v)$为$u,v$的最小割权值
在非负边权的无向图上使用网络流即可求得两点间的最小割,但是如果涉及查询所有点对的最小割,就需要进行$n^2$次网络流,复杂度很高
简介
对于非负边权的无向图,适用于求出多点对之间的最小割/最大流的结构
1.$\text{Gomory-Hu Tree}$的核心性质
构造树,使得树边$(u,v)$满足割掉这条边后,$u,v$的最小割对应将图分为树在两边的这两个集合
而边$(u,v)$的权值$w(u,v)=\lambda(u,v)$
2.求解最小割的方法
引理:
$\lambda(a,b)\ge \min\{\lambda(a,c),\lambda(c,b)\}$
假设$\lambda(a,b) < \min\{\lambda(a,c),\lambda(c,b)\}$
设$a,b$最小割的两个集合后两点所属的联通块集合为$A,B$
1.若$c\in A$,则$a,b$最小割也是$b,c$的割
2.若$c\in B$,则$a,b$最小割也是$a,c$的割
以上两种情况均与$\lambda(a,b) < \min\{\lambda(a,c),\lambda(c,b)\}$矛盾
假设要求$u,v$两点间的最短路,则答案就是$u,v$在树上路径的最小边权值,设其为边$(s,t)$
由上面的引理,显然有$\lambda(u,v)\ge\lambda(s,t)$
而我们由$\text{Gomory-Hu Tree}$的性质知道,$s,t$的割也是$u,v$的一个割,即$\lambda(u,v)\le \lambda(s,t)$
所以答案就是$\lambda(s,t)$
构建方法
构建$\text{Gomory-Hu Tree}$最重要的一条引理,可以认为是最小割的”不交叉”性质
对于$s,t$最小割的一侧,设其点集为$W$,则对于任意的$u,v\in W$,存在一个$s,t$最小割$X$,满足$X\sube W$
具体的证明比较复杂,咕,但是这个性质确实非常巧妙
利用这个性质,可以得到$\text{Gomory-Hu Tree}$的不严谨的递归构造方法
1.对于当前点集$S$,若$|S|=1$,则结束递归
2.从$S$中选择两个点$x,y$求出最小割,设在割中$x,y$所属点集分别为$X,Y$
3.在$\text{Gomory-Hu Tree}$上加入边$(x,y,\lambda(x,y))$,递归解决子问题$X\cap S,Y\cap S$
实际在递归求解$S$的问题时,应该将图中其他的点缩点(这是论文里说的,实际没有人这么写)
是不是不缩点跑出来的树形是错的?
递归求解的次数为$O(n)$,只需要求$O(n)$次网络流即可
放一下丑陋的板子
1 |
|
等价流树
等价流树的树形不需要满足$\text{Gomory-Hu Tree}$的性质,只需要能够查询两点间的答案即可
在论文中看到的等价流树的非递归构建方法(伪代码)
$w_{1,..,n}=0,fa_{1}=1,fa_{2,..,n}=1$
$\text{for u = 2 to n do}$
$v = fa_u$
求解$u,v$最小割
$w_u=\lambda(u,v)$
$\text{for x=u+1 to n do}$
$\text{if} fa_x=v \text{ and x在u这一侧 then }fa_x=u$
$\text{end for}$
$\text{end for}$
但是这个东西实际也不会跑得比$\text{Gomory-Hu Tree}$快,了解一下即可
1 |
|