
最小生成树
>& cost) { // write code here for(int i=0;i
发布日期:2021-05-07 11:06:07
浏览次数:23
分类:精选文章
本文共 815 字,大约阅读时间需要 2 分钟。
题目描述
一个有n户人家的村庄,有m条路连接着。村里现在要修路,每条路都有一个代价,现在请你帮忙计算下,最少需要花费多少的代价,就能让这n户人家连接起来。 示例1 输入 3,3,[[1,3,3],[1,2,1],[2,3,1]] 返回值 2题解:题目中的vector中是由多个列表组成,每个列表只有三个元素,分别表示边的起点,边的终点以及边的权重信息。
使用kruskal算法来实现本题目。算法原理大致如下,- 将所有边的全权重信息排序,时间复杂度为O(mlogm) m:边数
- 枚举每条边a,b,及其权重w,如果a,b边不连通则加入集合
具体算法执行过程可以看该博客的详细解释https://blog.csdn.net/qq_41754350/article/details/81460643
在实现该算法时,使用到了并查集的find函数,该函数用于查找节点的树根节点,因此需要初始化一个 p 数组,表示节点的父亲节点,初始 p 数组中的值是节点本身。在查找的过程中如果发现父亲节点与 x 不相同那么一直向上寻找,为什么这样做,原因在于 树根节点与自己本身是相同的,如果不同表示该节点是父亲节点的子节点,需要继续向上找。实现find函数用的是递归的方式。
定义一个结构体,用于存储边的起始节点,终止节点以及边的权重,此外要重载小于号。const int N=200010;class Solution { public: int p[N]; struct Edges { int a,b,w; bool operator < (const Edges &W) const { return w
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月11日 10时45分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(5.9-5.15)
2019-03-06
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
2019-03-06
上周热点回顾(1.16-1.22)
2019-03-06
上周热点回顾(1.23-1.29)
2019-03-06
上周热点回顾(3.20-3.26)
2019-03-06
上周热点回顾(4.24-4.30)
2019-03-06
[故障公告]博客站点1台负载均衡遭遇流量攻击,造成联通与移动用户无法正常访问
2019-03-06
上周热点回顾(6.19-6.25)
2019-03-06
云计算之路-阿里云上:docker swarm 集群故障与异常
2019-03-06
上周热点回顾(2.19-2.25)
2019-03-06
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2019-03-06
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2019-03-06
上周热点回顾(3.26-4.1)
2019-03-06
上周热点回顾(6.25-7.1)
2019-03-06
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2019-03-06
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06