最小割树
Posted lhm-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小割树相关的知识,希望对你有一定的参考价值。
通过建最小割树 ((Gomory-Hu Tree)) 来快速求解无向图中两点间的最小割。
最小割树中的一条边的权值,为其两端点的最小割,那么任意两点之间的最小割即为路径上的最小值。
通过递归建树即可。
(code:)
void build(int l,int r)
{
if(l==r) return;
s=p[l],t=p[l+1];
int v=F.dinic(),cnt1=0,cnt2=0;
add(s,t,v),add(t,s,v);
for(int i=l;i<=r;++i)
{
int x=p[i];
if(F.d[x]) p1[++cnt1]=x;
else p2[++cnt2]=x;
}
for(int i=1;i<=cnt1;++i) p[l+i-1]=p1[i];
for(int i=1;i<=cnt2;++i) p[l+cnt1+i-1]=p2[i];
build(l,l+cnt1-1),build(l+cnt1,r);
}
以上是关于最小割树的主要内容,如果未能解决你的问题,请参考以下文章
bzoj4435: [Cerc2015]Juice Junctions(最小割树+hash)