首页 > TAG信息列表 > 割树
[学习笔记]最小割树
定义: 边权为原图最小割的一颗树,对于树上的一条边\((s,t)\),去掉\((s,t)\)后,最小割树上两颗子树为割后的两个点集。 构造: 考虑分治,先任意选择两点,求得最小割为其边权,然后将两边递归操作,注意求最小割的并非在子集上做。 性质: \((x,y)\)的最小割为其在树上的两点路径的最小值。luogu P4897 【模板】最小割树(Gomory-Hu Tree)
题面传送门 看到一道题口胡出最小割树的做法了但是不会写。于是赶紧来学习一下。 首先最小割树的定义是:有这么一棵树,树上的边\((x,y)\)的权值为原图\(x,y\)之间的最小割的值。并且将这颗树的这条边断开划分出的两个点集是原图断开最小割的两个点集。 那么依据这个东西建树,先随便找初学最小割树
前言 证明什么的一概不会,问就是感性理解,总之先坑了。。。 最小割树的构造 任取当前点集中的两个点\(s,t\),求出\(s\)与\(t\)在原图上的任意一组最小割(设大小为\(v\)),然后就可以在最小割树上给\(s,t\)两点间连一条边权为\(v\)的边。 接着,把点集按照最小割分成两部分(即与\(s\)连通的一P4897 【模板】最小割树(Gomory-Hu Tree)
【题意】 给定一个n个点m条边的无向连通图,多次询问两点之间的最小割 【分析】 最小割树模板题 【代码】 #include<bits/stdc++.h> using namespace std; #define mp make_pair #define fi first #define se second #define lson now<<1 #define rson now<<1|1 typedef long long