首页 > 编程语言 >算法学习笔记(30):Kruskal 重构树

算法学习笔记(30):Kruskal 重构树

时间:2023-10-13 09:26:14浏览次数:35  
标签:重构 联通 Kruskal 30 最小 节点 边权

Kruskal 重构树

这是一种用于处理与最大/最小边权相关的一个数据结构。

其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程:

按边权排序,利用并查集维护连通性,进行合并。

如果我们在合并时,新建一个节点,其权值为当前处理的边的权值,并将合并的两个节点都连向新建的节点,那么就可以得到一颗重构树。

例如下列数据生成的重构树:

4
1 4 2
2 3 4
1 3 1
3 4 3

黑色代表节点编号,红色代表其权值。

其满足一些性质:

  • 这是一个二叉树,也是一个二叉堆

  • 两点 \(\mathrm{LCA}\) 的权值即是这两点联通的 最小/最大 代价/时间。

  • 对于一个限制,找到某个点最高的祖先 \(S\) 满足这个限制,那么 \(S\) 所在子树都满足此限制,并且此子树下所有叶节点在此限制下全部联通。

由于这些性质,kruskal 重构树常常与树剖/树上倍增放一起,做到每次 \(O(\log n)\) 的神秘操作。


Qpwoeirut and Vertices - 洛谷 为例:

给出 \(n\) 个点,\(m\) 条边的不带权无向连通图,\(q\) 次询问至少要加完前多少条边 \([L, R]\) 中的所有节点联通。

这是非常板的题,边权也就是其编号。

设 \(f(x)\) 表示 \(x\) 和 \(x + 1\) 联通的时间,那么所求也就是 \(\max_{x = L}^{R - 1} f(x)\),这只需要求出 \(f(x)\) 随便维护一下即可。

那么求 \(x, x + 1\) 的联通时间,找到他们在重构树上的 \(\mathrm{LCA}\),返回其编号即可。


[NOI2018] 归程 - 洛谷

或许其考点就是知不知道重构树,如果会了重构树,那么就简单了。

按照边权从大到小建出重构树,那么在当前水位下可联通的部分(整棵子树)也就很好求。

求这部分到固定的终点的最短路径?跑一次 DJK,然后把重构树看作一颗线段树,节点保存的也就是子树内最小的距离,在查询的时候利用倍增跳一跳就行了。

标签:重构,联通,Kruskal,30,最小,节点,边权
From: https://www.cnblogs.com/jeefy/p/17761104.html

相关文章

  • 算法训练day30 LeetCode93.78.90
    算法训练day30LeetCode93.78.9093.复原IP地址题目93.复原IP地址-力扣(LeetCode)题解代码随想录(programmercarl.com)使用'.'切割字符串、结束条件为字符串中有三个'.'、同时要确定字符串符合的条件长度为不为1时,首字符不能是0数值大小在[0,255]单个字符在'0'......
  • 130G docker seafile 从华为云迁移至腾讯云
    背景华为云到期,续费价格贵,腾讯云便宜,因此需要搬家华为云ubuntu16.401核2G200G系统盘,腾讯云同配置docker版seafile,文件总量130G力求简化粗暴无伤迁移方法操作华为云试做一个镜像,看看镜像有多大,测试后约90G在华为云买一个100G一个月时效的OBS,大约3.6元通知客户停机,做......
  • Kruskal重构树 学习笔记
    前言也许在看这篇文章之前,你可以看看这篇文章?前置知识:\(kruskal\)求最小生成树,并查集……算法介绍问题引入两个点之间的所有简单路径上最大边权的最小值。我们定义\(u\tov\)路径的瓶颈为,路径上的边权最大值。那么下图的瓶颈就为4:同时一条路径也可能有多个瓶颈,求最......
  • [AGC030F] Permutation and Minimum 题解
    PermutationandMinimum看到300的数据范围,再加上计数题,很容易就往计数DP方向去想。为方便,我们将\(n\)乘二。因为是两个位置取\(\min\),于是我们便想到从小往大把每个数填入序列。于是DP数组第一维的意义便出来了:当前已经填入了前\(i\)小个数。考虑当前填入一个数。这......
  • ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型
    在日常开发中,我们会创建Type和对应的TAB供其他数据库对象使用,如果对象引用了该Type,则对其修改(CREATEORREPLACETYPE)时会出现如下错误,ORA-02303:无法使用类型或表的相关性来删除或取代一个类型。举例:SQL>CREATEORREPLACETYPEtyp_payment_order_resultASOBJECT2(......
  • getMonth():获取当前月(注意:返回数值为0~11,需要自己+1来显示),0代表一月份,如果要显示2位
    getMonth():获取当前月(注意:返回数值为0~11,需要自己+1来显示),0代表一月份,JavaScriptDate对象 日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并并允许用户对其修改。如果要捕获用户修改日期选择控件的数据事件响应,需要为DataPicker添加一个OnDateChangedListene......
  • 【FTP】FlashFXP 530 Non-anonymous ... 连接失败(连接已被客户端关闭)
    参考的这个图: ......
  • 20230921 做题记录
    20230921做题记录目录20230921做题记录总结1P2863[USACO06JAN]TheCowPromS2P2746[USACO5.3]校园网NetworkofSchools3P1407[国家集训队]稳定婚姻4P1072[NOIP2009提高组]Hankson的趣味题总结总计完成\(3+4\)题上午校内练习赛,下午改了上午的题,晚上继续......
  • Hi3861 : 使用ssd1306玩贪吃蛇
    练手写了个贪吃蛇玩玩(屏幕驱动库:ssd1306·连志安/3861智能家居套件代码仓库-码云-开源中国(gitee.com)user键开始,S1向左,S2向右#include<string.h>#include<stdio.h>#include<time.h>#include"ssd1306.h"#include"ssd1306_tests.h"#include"link.h&......
  • 【20230613】【Python基础教程】第一章 基础知识
    第一章基础知识I1.4数字与表达python3.x会进行一些浮点数的计算点击查看代码print(1/2)#浮点计算print(1//2)#整除实现结果只保留整数部分print(1%2)#取余保留余数print(2**3)#幂函数结果如下:点击查看代码0.50181.4.1长整型数python3.x......