第三种最小生成树算法 Borůvka算法

基本思路:

用定点数组记录每个子树的最近邻居。

对于每一条边进行处理:

如果这条边连成的两个顶点同属于一个集合,则不处理,否则检测这条边连接的两个子树,如果是连接这两个子树的最小边,则更新 (合并)。

作用:

那么中算法有什么用呢,Kruskal,prim算法不好吗?它们好是好,但在某些题目里面可能用第三种算法更加优。对于那些点数n是1e5级别,边数m却是n2n^2n2级别的图,但每个点的最小边能很快算出来的题,求最小生成树我们不可能存得下边。这时候Borůvka算法用处就体现了,因为它的空间复杂度只跟点数有关。

代码:

struct node {int x, y, w; } edge[M];
int d[N];   // 各子树的最小连外边的权值
int e[N];   // 各子树的最小连外边的索引
bool v[M];  // 防止边重复统计int fa[N];
int find(int x) {return x==fa[x] ? x : (fa[x]=find(fa[x])); }
void join(int x, int y) {fa[find(x)]=find(y); }int Boruvka() {int tot=0;for (int i=1; i<=n; ++i) fa[i]=i;while (true) {int cur=0;for (int i=1; i<=n; ++i) d[i]=inf;for (int i=1; i<=m; ++i) {int a=find(edge[i].x), b=find(edge[i].y), c=edge[i].w;if (a==b) continue;cur++;if (c<d[a] || c==d[a] && i<e[a]) d[a]=c, e[a]=i;if (c<d[b] || c==d[b] && i<e[b]) d[b]=c, e[b]=i;}if (cur==0) break;for (int i=1; i<=n; ++i) if (d[i]!=inf && !v[e[i]]) {join(edge[e[i]].x, edge[e[i]].y), tot+=edge[e[i]].w;v[e[i]]=true;}}return tot;
}

参考:
https://www.cnblogs.com/greyqz/p/9536352.html

第三种最小生成树算法 Borůvka算法相关推荐

  1. Codeforces.888G.Xor-MST(Borůvka算法求MST 贪心 Trie)

    题目链接 \(Description\) 有一张\(n\)个点的完全图,每个点的权值为\(a_i\),两个点之间的边权为\(a_i\ xor\ a_j\).求该图的最小生成树. \(n\leq2*10 ...

  2. 三种最小生成树算法的简要比较:Kruskal算法, 破圈法(管梅谷), Prim算法

    本文针对之前常常弄混Kruskal算法, 破圈法(管梅谷), Prim算法这三种算法的问题,仅仅简单地总结Kruskal算法, 破圈法(管梅谷), Prim算法在求最小生成树时的思路的区别. 如果目的 ...

  3. 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析

    识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...

  4. 算法:三种简单排序算法

    排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...

  5. pca算法python实现_三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  6. 【python 以图搜图】三种图片相似度计算融合算法

    目标:在一个文件夹找出相似度较高的图片,达到以图搜图的目的. 我找了十组,都是高度相似的图片. 核心算法: 1.分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phas ...

  7. 三种不同的文本图像背景漂白/纯化/去除算法

    本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/14617355.html  ...

  8. python中pca算法_Python使用三种方法实现PCA算法

    主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...

  9. pca算法python代码_三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  10. 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)

    作者:SovietPower✨ 链接:https://ac.nowcoder.com/discuss/186584 来源:牛客网 度数序列 对于无向图, 为每个点的度数.有 (每条边被计算两次).有偶 ...

最新文章

  1. [ 一起学React系列 -- 10 ] i18n
  2. CCNP-19 IS-IS试验2(BSCI)
  3. 在CentOS上搭建PHP服务器环境
  4. OOD知识---对OOA\OOD\OOP思想
  5. 循环结果添加到集合_Java Note-数据结构(4)集合
  6. TME上市两周年|为2020甜蜜发糖,收获2021的希望
  7. c++interesting转换为uint_巴西插头标准,旅行转换插头是怎样的?
  8. winform DataGridView的虚模式填充,CellValueNeeded事件的触发条件
  9. 1.Kubernetes 简介
  10. 诸葛io的技术架构图_阿里P8总结三面四轮技术面试:Tomcat+Redis+线程池锁+悲观锁+NIO...
  11. 【ACC编码】基于FPGA的音频ACC编码实现
  12. VSDX Annotator for mac(Visio 绘图工具)
  13. 华为 eNSP模拟器安装教程
  14. 视频教程-C++Windows之WDM驱动程序开发(实战篇)上-驱动/内核开发
  15. 怎么看计算机内存和独显,怎么看电脑是集成显卡还是独立显卡
  16. 电子商务复习笔记三:网络营销
  17. 使用python来完成数据的线性拟合
  18. linux raid5 性能,RAID级别及各个级别特性
  19. pymysql获取要查询的字段名(列名)
  20. 在家做什么挣钱,50个赚钱的热门项目分享

热门文章

  1. 增加linux vg 空间大小_Desperate struggle
  2. 《孙子兵法》十三篇注译(5--形篇)
  3. 1000. 合并石头的最低成本
  4. 诺奖经济大师,数学天才赌徒,和“神秘的股市财富公式”
  5. 24券的“天才”创始人如何打坏一手好牌(转载)
  6. idea git操作
  7. 链家深圳租房信息爬取练习 附加源码
  8. Java服务优雅停机_JAVA优雅停机的实现
  9. Swift 网络请求——Moya的使用
  10. Cocos技术派 | TS版属性面板定义高级篇