prim例题

本文介绍了两个使用Prim算法解决的实际问题:一是最优布线问题,目标是连接所有计算机以最小化总费用;二是局域网问题,需要消除回路并最大化网络中畅通程度差的总和。给出了解题思路和代码示例。
摘要由CSDN通过智能技术生成

1.

1349:【例4-10】最优布线问题

时间限制: 1000 ms 内存限制: 65536 KB

提交数: 6893 通过数: 4250

【题目描述】

学校有nn台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。

当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。

现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

【输入】

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

【输出】

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

【输入样例】

3

0 1 2

1 0 1

2 1 0

【输出样例】

2

【提示】

注:表示连接1223,费用为2

####

解:题目为最小生成树的模板,只需要把最小生成树给求出,然后把个边加一起就可以算出最小花费。为了方便可以把最小生成树模板给改一下,设置一个cnt记录当前加入了几条边,当为n-1时结束,因为第一条为1-1所以不加,其它均result+=nd.w,最后result就是正确结果。

代码

2.

1391:局域网(net)

时间限制: 1000 ms 内存限制: 65536 KB

提交数: 5574 通过数: 3460

【题目描述】

某个局域网内有n(n≤100)n(n≤100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象。因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)f(i,j)表示i,ji,j之间连接的畅通程度(f(i,j)≤1000)(f(i,j)≤1000),f(i,j)f(i,j)值越小表示i,ji,j之间连接越通畅,f(i,j)f(i,j)为00表示i,ji,j之间无网线连接。现在我们需要解决回路问题,我们将除去一些连线,使得网络中没有回路,并且被除去网线的Σf(i,j)Σf(i,j)最大,请求出这个最大值。

【输入】

第一行两个正整数n,kn,k

接下来的kk行每行三个正整数i,j,mi,j,m表示i,ji,j两台计算机之间有网线联通,通畅程度为mm。

【输出】

一个正整数,Σf(i,j)Σf(i,j)的最大值。

【输入样例】

5 5

1 2 8

1 3 1

1 5 3

2 4 5

3 4 2

【输出样例】

8

分析题目总边长等于花费的加除去的,只需要让花费的最少那除去的就会最多,所以只需要求出最短生成树之后用总边长减去最小生成树,就是最多剩下的,所以这个题与1349基本一样,求出最小生成树花费;然后用总边长减去花费就是最大除去;

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值