并查集是一种可以在较短的时间内进行集合的查找与合并的树形数据结构

每次合并只需将两棵树的根合并即可

通过路径压缩减小每颗树的深度可以使查找祖先的速度加快不少

代码如下:

int getfather(int x)                //查找祖先
{if(father[x]!=x)father[x]=getfather(father[x]); //路径压缩,把每个节点的父亲都变得与他的祖先相同elsereturn x;return father[x];
}
int issame(int x,int y)             //是否在同一个集合
{return getfather(x)==getfather(y);
}
void set_union(int x,int y)         //合并
{int fx,fy;fx=getfather(x);fy=getfather(y);father[fx]=fy;
}

并查集优化克鲁斯卡尔算法:

for(i=1;i<=n;i++)father[i]=i;qsort(e,k,sizeof(ed),cmp);ans=0;for(i=0;i<k;i++){if(issame(e[i].l,e[i].r))         //跳过已在生成树中的边continue;ans+=e[i].weight;set_union(e[i].l,e[i].r);}

转载于:https://www.cnblogs.com/lnever/p/3933749.html

并查集及其简单应用:优化kruskal算法相关推荐

  1. 并查集——最小连接路径和Kruskal(hdu1301)

    *没听说过并查集的同学先移步看一下上篇博客http://blog.csdn.net/sm9sun/article/details/53256232 好,首先说一下并查集的标准定义: 概述: 在一些有N ...

  2. [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。

    一般的并查集都是用递归或者新建一个类来实现,这里介绍一种用Python来实现的非递归非函数并查集,这个方法暂时未在其他地方见过,尤其是中文领域目前还未见过,很可能是搜索引擎无法搜索到正确内容的原因,所 ...

  3. 【贪心】 POJ 1456 Supermarket 详解 (并查集/二叉堆优化)

    题目链接:POJ-1456 题目大意 有n件商品,每件商品的利润为,销售日期的截止时间为(即只能在时间前销售该物品).一天只能销售一件物品.问这n件商品的最大利润为多少 方案一 分析 有两种贪心策略, ...

  4. 【算法】克鲁斯卡尔 (Kruskal) 算法

    目录 1.概述 2.代码实现 2.1.并查集 2.2.邻接矩阵存储图 2.3.邻接表存储图 2.4.测试代码 3.应用 本文参考: <数据结构教程>第 5 版 李春葆 主编 1.概述 (1 ...

  5. 基于C语言,详解Kruskal算法(利用并查集)实现构建最小生成树

    目录 一.Kruskal算法的基本介绍 具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边.这里的关键就是如何判断"将它 ...

  6. LA3644简单并查集判环

    题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每 ...

  7. In Touch(dijk+并查集优化)

    There are n soda living in a straight line. soda are numbered by 1,2,-,n1,2,-,n from left to right. ...

  8. 并查集入门+初级专题训练

    介绍   摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明:   并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...

  9. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口

    文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...

最新文章

  1. 深入理解 Mybatis 插件开发
  2. LeetCode 47. 全排列 II
  3. 012_JDBC模板
  4. 多继承-概念、语法和基本演练
  5. APP不显示GPU过度渲染的问题
  6. idea怎么把代码放到git_在IDEA中如何初始化Git,把项目推送到Git上
  7. 三十五岁后,如何自学WEB前端编程
  8. 微信暗黑模式终于来了!这次微信对苹果认怂了?腾讯张军回应...
  9. SSH 框架 没加commons-beanutils-1.7.0.jar包的错误提示
  10. C# 未能加载文件或程序集“ Newtonsoft.Json” Json格式错误
  11. 4204. 构造矩阵
  12. 在线教学战“疫”打响,VIPKID背后是阿里云
  13. python蒙特卡洛模拟_用Python实现蒙特卡洛模拟
  14. 无人机倾斜摄影技术应用(文末附作业指导书)
  15. linux gzip 加密,gzip命令
  16. 【B站弹幕游戏开发笔记02】Win10系统下给Python项目导入Protobuf
  17. C/C++ 【华为机试】输入一个真分数,将该分数分解为埃及分数。
  18. 7-2 不变初心数 (15 分)
  19. 把C盘正好分成100G的数值
  20. veket linux能运行qq么,【veket系统】Veket Linux系统下载 v8.07 官方正式版-开心电玩...

热门文章

  1. php安装sphinx扩展,安装php的sphinx扩展模块
  2. 优秀自我简介200字_自我简介200字左右7篇
  3. 网页运行python脚本_python脚本和网页有何区别
  4. vue set方法_Vue 数据响应式
  5. Python xrange()函数
  6. 编程中什么叫做元素什么叫帧_R编程中的数据帧
  7. xcode 快捷_您必须知道的Xcode快捷方式
  8. kotlin web_Kotlin Web应用程序教程
  9. hadoop和hdfs命令_Hadoop 1.x和2.x HDFS基本开发人员命令,“ hadoop”命令
  10. python exec_Python exec()