洛谷题目:P8074 [COCI 2009/2010 #7] SVEMIR 题解 (一点难)

介绍:

         

前言:

这道题要求我们在 N 个星球之间建造 N - 1 条隧道,使得所有星球能够直接或间接连接,并且建造隧道的价格为两个星球在 x ,y zf 三个维度上差值的绝对值为最小值,最终要找出完成任务所需的最小总价值,主要是利用 MST(最小生成树) 算法来解决,下面是小亦为大家的详细讲解:

#解题思路:

        1、最小生成树概念:

                对于一个具有 N个定顶点的连通图时,其最小生成树是一个包含图中所有顶点而且边数为 N - 1 的无环子图,并且该子图的边权之和最小。在这道题里,每个星球都是图的顶点,星球之间的隧道是边,隧道的讲个事边的权值。我们的主要目标就是找到这个图的最小生成树,其边权之和呢就是最小总价。

        2、使用 Kruskal 算法:

                2.1、由于我们需要计算任意两个星球之间所建造隧道的价格。为了减少我们的计算量,我们按找 x , y , z 坐标对星球进行排序。

                2.2、对于按照每个维度排好序的星球序列,计算相邻星球之间的边。例如在按照 x 坐标后,计算相邻星球在 x 维度上的距离 abs(x[ i ].first - x[ i + 1 ].first)作为边的权值并将这条边记录起来。对 y 和 z 维度也进行相同的操作。

                2.3、对边按权值排序:将所有计算得到的边放入一个集合当中,然后使用 sort 函数对这些边按照权值从小到大进行排序。目的就是为了在后续的步骤中,能够悠闲选择权值最小的边来构建成最小生成树。

                2.4、利用并查集构建成最小生成树:

                初始化并查集,每个星球的父节点初始化为自身,表示每个星球都独立成每个集合。

                遍历排序后的边集合,对于每条边,需检查其两个断电是否是同一个集合。如果不是,说明不会形成环,那就将这条边加入到生成树当中,丙类加上这个条边的权值到总价格 cost当中,同属边的数量 + 1 。

                当边的数量达到 n - 1 时,那就说明生成树已经构建完成啦~此时的总价就是完成任务所需的最小总价了。

                3、输出结果:

                        最后的最后,将计算得到的最小总价输出,就做完了啊。

##复杂度:

        1、时间复杂度:

                O(NlogN)

        2、空间复杂度:

                O(N)

###代码:

        !!!声明!!!由于时间更新有限,代码提供将会在后期再放上去,谅解!!!

  感谢观看!!!

制作:Code.小亦
代码提供:Code.小亦
题目思路部分提供:无

代码部分思路提供:无

初审:Code.小亦。

终审:Code.小亦

本文章属于原创作品,禁止任何人进行转载,除合作之外!!

如在阅读中发现知识性错误、代码错误、错别字错误等情况私信博主或评论或通过邮箱2952104443@qq.com。

另:题目来源:首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值