最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)

本文介绍了最小生成树的概念及其在解决实际问题中的应用,如最优布线、繁忙都市道路改造和联络员通信费用优化。文章详细阐述了Prim算法和Kruskal算法,并给出了对应的C++代码实现。通过三个实例,展示了如何使用最小生成树解决网络连接优化问题,旨在帮助读者理解和掌握这一重要算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言

今天老师教了 最小生成树 ,教了两种算法:Prim算法 和 Kruskal算法
Prim算法想快要加堆优化又是这烦人的堆优化,但又一些题目必须用Prim算法,正常Prim算法 时间复杂度为 O ( n 2 ) O(n^2) O(n2),堆优化后是 O ( m l o g m ) O(mlog_m) O(mlogm)
Kruskal算法 十分好打,还快;实现思路是
将边的权值排序,对边进行枚举,然后加入并查集 时间复杂度为 O ( m l o g m ) O(mlog_m) O(mlogm).
我将用Kruskal 算法做最小生成树

正文

First Promble 最优布线问题

时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB
题目描述

学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。
当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

输入

第一行为整数n ( 2 ≤ n ≤ 100 ) (2\le n\le 100) (2n100),表示计算机的数目。此后的 n n n行,每行 n n n个整数。第 x + 1 x+1 x+1 y y y列的整数表示直接连接第 x x x台计算机和第 y y y台计算机的费用。

输出

一个整数,表示最小的连接费用。

样例输入

3 3 3
0 0 0 1 1 1 2 2 2
1 1 1 0 0 0 1 1 1
2 2 2 1 1 1 0 0 0

样例输出

2 2 2

提示

(注:表示连接 1 1 1 2 2 2 2 2 2 3 3 3,费用为 2 2 2

实现思路

这是一个模板最小生成树,自学最小生成树,我推荐这篇;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值