首页 > 其他分享 >Kruskal重构树

Kruskal重构树

时间:2024-09-02 20:03:47浏览次数:8  
标签:重构 Kruskal 路径 集合 节点 边权

Kruskal 重构树

定义

在跑 Kruskal 的过程中我们会从小到大加入若干条边。现在我们仍然按照这个顺序。

首先新建 \(n\) 个集合,每个集合恰有一个节点,点权为 \(0\)。

每一次加边会合并两个集合,我们可以新建一个点,点权为加入边的边权,同时将两个集合的根节点分别设为新建点的左儿子和右儿子。然后我们将两个集合和新建点合并成一个集合。将新建点设为根。

不难发现,在进行 \(n-1\) 轮之后我们得到了一棵恰有 \(n\) 个叶子的二叉树,同时每个非叶子节点恰好有两个儿子。这棵树就叫 Kruskal 重构树。

举个例子:

这张图的 Kruskal 重构树如下:

性质

不难发现,原图中两个点之间的所有简单路径上最大边权的最小值 = 最小生成树上两个点之间的简单路径上的最大值 = Kruskal 重构树上两点之间的 LCA 的权值。

也就是说,到点 \(x\) 的简单路径上最大边权的最小值 \(\leq val\) 的所有点 \(y\) 均在 Kruskal 重构树上的某一棵子树内,且恰好为该子树的所有叶子节点。

我们在 Kruskal 重构树上找到 \(x\) 到根的路径上权值 \(\leq val\) 的最浅的节点。显然这就是所有满足条件的节点所在的子树的根节点。

如果需要求原图中两个点之间的所有简单路径上最小边权的最大值,则在跑 Kruskal 的过程中按边权大到小的顺序加边。

标签:重构,Kruskal,路径,集合,节点,边权
From: https://www.cnblogs.com/Violetfan/p/18393421

相关文章

  • python并发与并行(六) ———— 正确的重构代码,以便用Queue做并发
    在前面“python并发与并行(五.2)————不要在每次fan-out时都新建一批Thread实例”里面,大家看到,每次都手工创建一批线程并平行地执行I/O任务是有很多缺点的。这一条要介绍另一种方案,也就是用内置的queue模块里的Queue类实现多线程管道。Queue方案的总思路是:在推进游戏时,不像原来......
  • 从菜鸟到高手:掌握Python推导式,让代码飞起来,列表、集合、字典,一网打尽,用Python推导式
    "在Python的广阔世界里,隐藏着一种让程序员们爱不释手的秘密武器——推导式。想象一下,你正站在数据处理的战场上,面对着成千上万条数据,需要快速筛选、转换、聚合。这时,你手中的列表推导、集合推导、字典推导就像三把锋利的剑,轻轻一挥,便能将复杂的数据操作化繁为简,让代码如同行云......
  • Note - kruskal 重构树
    点权多叉重构树Kruskal重构树不仅适用于限制边权的题目,也可以处理限制点权的情况。在某多校冲刺NOIP联训测试2021和CF1797F出现了这种方法。Alex_wei的博客进行了详细讲解。\(Problem1.\)「NOIP多校联训2021」超级加倍参考资料Alex_wei......
  • ICCEMDAN+皮尔逊+小波分解降噪+重构
    ICEEMDAN+皮尔逊+小波分解降噪+重构代码获取戳此处ICEEMDAN(改进的CEEMDAN)原理:ICEEMDAN是由Colominas等人提出的信号处理方法,它是在自适应噪声完全集合经验模态分解(CEEMDAN)的基础上发展而来。与CEEMDAN不同,ICEEMDAN在分解过程中不是直接添加高斯白噪声,而是选取白噪声被E......
  • Swift代码重构:提升代码质量的魔法工具
    标题:Swift代码重构:提升代码质量的魔法工具Swift是一种用于iOS、macOS、watchOS和tvOS应用开发的强类型、编译型编程语言。随着应用的迭代和功能的增加,代码的维护和扩展变得越来越复杂。Swift的代码重构工具可以帮助开发者改进现有代码的设计而不改变其外部行为,从而提高代码......
  • 【Java Lambda系列】新玩法,用Lambda重构设计模式
    前言前面三章通过理论+案例的方式对Lambda的描述,应该能基本上解决大家日常开发中所遇到的Lambda问题,为了更好的展现Lambda魅力,和加深巩固Lambda知识点,今天咱们讨论Lambda如何重构设计模式!关于设计模式众所周知,设计模式是一群大佬程序员将对程序设计的经验归纳总结起来的......
  • Kruskal 重构树学习笔记
    前言今天题单里面有这个题(AGC002D)需要用到相关知识就学习了一下。以该题为例讲解一下kruskal重构树的构成与性质。构造用图片来展示构造的过程,简单来说就是将边权从小到大排序,然后给每条边的两点建出一个父亲来,父亲的点权就是原先这条边的边权,如果其中一方或双方都在某个新建......
  • 系统重构新旧流量平滑迁移方案
    背景旧交易系统存活时间比较久,随着组织架构的不断调整,旧交易新系统在各个团队轮转,技术和代码腐化严重,针对于新业务支持能力很差。经过内部慎重决策,在旧交易系统基础上,针对技术和业务上进行重构,期望新架构在技术和业务上有一个良好的扩展性。作为交易系统最为重要的就是稳......
  • Python教程:异常捕捉与代码重构
    异常pYthon使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所错的错误时,他都会创建一个异常对象。当你编写了处理改异常的代码,该程序将继续运行;如果你未对异常进行处理,程序停止,并显示一个traceback,其中包含有关异常的报告。异常是使用try-except代......
  • 设计原则与思想:规范与重构 理论一 - 三 什么情况下要重构?到底重构什么?又该如何重构?有
    理论一:什么情况下要重构?到底重构什么?又该如何重构?重构的目的:为什么要重构(why)?对于项目来言,重构可以保持代码质量持续处于一个可控状态,不至于腐化到无可救药的地步。对于个人而言,重构非常锻炼一个人的代码能力,并且是一件非常有成就感的事情。它是我们学习的经典设计思想......