Loading

【学习笔记】Kruskal 重构树

Page Views Count

算法思想

由于最小瓶颈树一定是最小生成树,所以瓶颈路问题可以和最小生成树算法结合,通过记录下 Kruskal 求最小生成树过程中的一些信息,可以实现瓶颈路的查询。

实现

考虑模拟 Kruskal 最小生成树的过程,当两个连通块合并时,新建一个节点作为二者的父亲,并将这条边的边权作为这个新建节点的父亲,这样可以得到一个 \(2n-1\) 的树。

例题

不难发现,每个非叶子节点的子树都表示当限制边权小于等于该节点权值时(最大生成树为大于等于),可以互达的节点集合,利用这个性质可以解决限制瓶颈的问题。

同时可以解决形如 \(\sum_{i=1}^n\sum_{j=i+1}^n \mathrm{maxdis}(i,j)\),其中 \(\mathrm{maxdis}(i,j)\) 表示 \(i,j\) 路径上最大边权。

LibreOJ-137 最小瓶颈路(加强版)

模板题,需要 \(O(1)\)\(\mathrm{LCA}\)

Luogu-P4768 NOI 2018 归程

有了瓶颈的限制,很明显是查一下重构树的子树最值,Dijkstra 预处理一下。

CodeForces-1578L Labyrinth *2400

重构树上 DP。

不难发现更优的策略一定是先解决一个子树再解决另一个子树,也就划分成了子问题,设 \(f_u\) 为保证 \(u\) 子树全部吃完时初始进入的最大值。容易得到,我们初始在哪个位置并不重要,因为一定可以先不吃而走到真正适合的位置,于是有转移方程:

\[f_u=\max\{\min\{f_{v1},w(u,v1)\}-sum_{v2},\min\{f_{v2},w(u,v2)\}-sum_{v1}\} \]

判断一下是否合法即可。

Luogu-P7834 ONTAK 2010 Peaks 加强版

重构树子树内查询区间第 \(k\) 大,上一个可持久化线段树。

参考资料

posted @ 2022-11-25 21:38  SoyTony  阅读(149)  评论(1编辑  收藏  举报