Kruskal重构树学习笔记(C++)

news/2024/11/19 20:33:34/

Kruskal重构树学习笔记

提示:

学习Kruskal重构树之前建议先了解一下Kruskal算法,虽然不了解这个影响不会很大

一定要了解一下并查集的算法

接下来如果想要应用Kruskal重构树,一定要了解一下LCA算法

什么是Kruskal重构树

这里先简单说明一下Kruskal算法:

Kruskal算法依托于并查集算法实现

一张图的边排序,从小到大依次将每一条边加入最小生成树,如果加入后会形成环,则不加入

Kruskal重构树的算法与其基本一致:

Kruskal重构树算法依托于并查集算法实现

(这里文字描述可能优点绕口,建议先看图再回来看文字)

一张图的边排序,从小到大依次尝试每一条边

将边的两个节点的根节点(当一棵树只有一个节点时,它就是自己的根节点)连接到一个新创建节点上

赋予新创建节点权值,权值等于这条边的边权

循环,直至形成一棵树(所有点都在一个集合中)

这里写图片描述

*注:上图来自CSDN博主wu_tongtong:http://blog.csdn.net/wu_tongtong

第一次合并,1和4间边权最小,合并1和4

在这里插入图片描述

第二次合并,3和6间边权最小,合并3和6

第三次合并,1和2间边权最小,合并2和1的根节点
在这里插入图片描述

第四次合并,5和4间边权最小,合并5和2的根节点
在这里插入图片描述

Kruskal重构树的性质

1、二叉树

2、原树两点间路径上边权的最大值 = 新树两点间路径上点权的最大值

也就是说原树中两点之间路径上边权的最大值等于新树上两点的LCA的点权

3、子节点的点权小于等于父节点(大根堆)

Kruskal重构树的实现

讲解完了思路,接下来实现具体的代码

void exKruskal(int n) {edge t;int u, v;while (!p_q.empty()) {//p_q为优先队列(小根堆)t = p_q.top();p_q.pop();//取出最短边u = t.u; v = t.v;if (is_in_same(u, v)) continue;//会形成环//不会形成环n++;//从n + 1开始分配fa[n] = fa[u] = fa[v] = n;son[n][0] = u; son[n][1] = v;//连接value[n] = t.p;//赋值}
}

这个只是便于理解的版本,实现方式多种多样,这里不一一列举

Kruskal重构树例题

1、P1967[NOIP2013 提高组] 货车运输

2、P2245 星际导航

3、P4197 Peaks

4、P4768 [NOI2018] 归程

(已按难度升序排序,洛谷中每道题都有相应的题解)


http://www.ppmy.cn/news/12593.html

相关文章

Linux进程间通信

文章目录进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类管道什么是管道匿名管道匿名管道的原理pipe函数匿名管道使用步骤管道读写规则管道的特点管道的四种特殊情况管道的大小命名管道命名管道的原理使用命令创建命名管道创建一个命名管道命…

第一个python程序

我们将看一下如何用Python编写运行一个传统的“Hello World”程序。通过它,你将学会如何编写、保存和运行Python程序。 有两种使用Python运行你的程序的方式——使用交互式的带提示符的解释器或使用源文件。 1.使用带提示符的解释器 在命令行的shell提示符下键入python,启动解释…

【Android笔记67】Android之使用系统中的相机功能(拍照、保存照片、显示拍摄的照片、照片保存到图库等操作)

这篇文章,主要介绍Android如何使用系统中的相机功能(拍照、保存照片、显示拍摄的照片、照片保存到图库等操作)。 目录 一、使用Android相机功能 1.1、如何调用相机功能 1.2、调用相机功能

Wav2Vec HuBert 自监督语音识别模型

文章目录Wav2Vec: Unsupervised pre-training for speech recognitionabstractmethodwav2vec 2.0: A Framework for Self-Supervised Learning of Speech RepresentationsabstractintroductionmethodMODEL arch损失函数finetuneexprimentHuBERT: Self-Supervised Speech Repres…

第三章 熟悉的气息

Died有些奇怪,这个游戏好像有哪里不对劲,对,比她输入的代码要多了很多。她的游戏……只是很简单的啊。 Died的虚拟世界里…… 一个人,看不清面容,笑着:“Died的数据传回来了吗?” Died准备休息一…

孤儿进程和僵尸进程

文章目录孤儿进程僵尸进程孤儿进程 定义 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程(Orphan Process)每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置…

修改jupyter notebook默认路径

修改jupyter notebook默认路径jupyter notebook默认打开C:\Users\你的用户名,用户名是你的电脑用户名,upload文件又会在C盘生成一堆文件,很乱,用notebook打开文件还要跳转到目录,很麻烦,那有没有办法呢&…

RESTful的风格提倡 URL 地址使用统一的风格设计

RESTful概念实现REST:Representational State Transfer,表现层资源状态转移。资源:资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。资源的表述资源的表…