【学习笔记】Kruskal 重构树

Page Views Count

算法思想#

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

实现#

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

例题#

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

同时可以解决形如 i=1nj=i+1nmaxdis(i,j),其中 maxdis(i,j) 表示 i,j 路径上最大边权。

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

模板题,需要 O(1)LCA

Luogu-P4768 NOI 2018 归程#

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

CodeForces-1578L Labyrinth *2400#

重构树上 DP。

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

fu=max{min{fv1,w(u,v1)}sumv2,min{fv2,w(u,v2)}sumv1}

判断一下是否合法即可。

Luogu-P7834 ONTAK 2010 Peaks 加强版#

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

参考资料#

作者:SoyTony

出处:https://www.cnblogs.com/SoyTony/p/Learning_Notes_about_Kruskal_Reconstruction_Tree.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   SoyTony  阅读(284)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示