【模板】最小割树(Gomory-Hu Tree)

本文介绍了Gomory-Hu Tree的概念,用于求解图中任意两点间的最小割。通过深度优先搜索策略,可以利用树上倍增询问来高效地获取这些信息。虽然不涉及详细证明,但解释了如何通过分治策略建立最小割树,即每次选取两点计算最小割,并根据割将点集划分,重复此过程直至构建完成。最后,提到了最小割树的建立实际上等价于执行n-1次 Dinic 算法。
摘要由CSDN通过智能技术生成

Problem

在这里插入图片描述

Solution

  • 做模板使用,不证明(不会证 。
  • 原图中两点间的最小割为最小割树上两点间最小割,可通过树上倍增询问。
  • 最小割树的建立:任意两点间的最小割将当前点集分成两部分,以此为基础分治,每次从当前点集中任取两点求最小割,将最小割作为Gomory-Hu Tree上两点间的边权,并根据最小割将当前点集分成两部分,s那边的与t那边的,边界就是当前点集中只有一个点。
  • 相当于跑了n-1次dinic。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 505,maxm = 1505,inf = 1e9;
int cnt = 1,last[maxn],ceng[maxn],cnt0=1,belong[maxn];
int cur[maxn],n,m,cnt1,f[maxn][20],dep[maxn],front[maxn],Q,gm[maxn][20];
struct edge{
	int v,next,w;
}e[maxm<<2];
edge te[maxn<<1];
inline void add(int u,int v,int w)
{
	e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值