Kruskal 重构树学习笔记

Kruskal 重构树

回忆 Kruskal 算法求最小生成树的过程,将所有边按边权排序,然后从小到大合并。若两个点不直接合并,而是新建一个虚点 z,连 zxzy,就形成了一棵 Kruskal 重构树

Kruskal 重构树有一些性质:

  1. 树为二叉树。
  2. 原图的所有结点为树的叶子结点。
  3. 若边按边权从小到大排序,则父结点点权 根结点点权;反之亦然。
  4. 结点 u 在原图中所有经过边权 d 的边能到达的点,就是它在按边权从小到大排序得到的重构树上最浅的,点权 d 的祖先 v 的子树内的所有叶子结点。

因此可以得出一个套路:如果题目有类似经过权值 dd 的点或边的限制,就可以考虑使用 Kruskal 重构树

若要处理经过点权 dd 的点的限制,则需要为边赋值。例如,若限制经过点权 d,则经过边 uv 需要满足 u,v 两个点的点权均 d,因此边权为 min(au,av)

有些题目既限制了权值 min 也限制了权值 max,可以按边权从小到大和从大到小建两棵 Kruskal 重构树,并根据 minmax 倍增到相应的祖先结点,问题就转化成了两棵子树交。记 a,b 分别为两棵树的 dfs 序,则问题为满足 i[l1,r1]j[l2,r2]ai=bji,j 数量。设 cibia 中出现的下标,问题即求 ci[l1,r1]i[l2,r2]i 的数量。二维偏序,可以在线主席树或者离线树状数组+扫描线求解。

参考:简单树论 by Alex_Wei

posted @   zltzlt  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示