最优生成树(kruskal算法)

本文介绍了如何运用Kruskal算法解决求解最小生成树的问题,并提供了具体的输入输出格式及样例,同时分析了算法思路,强调了贪心策略的重要性。通过并查集实现Kruskal算法来找到连通无向图的最优生成树。
摘要由CSDN通过智能技术生成

【问题描述】

给出N个顶点、E条边的连通无向简单图,请你完成下列任务:

任务1、求边权和最小的生成树(最小生成树)

任务2、求边权和最大的生成树(最大生成树)

任务3、求最大边最小的生成树(瓶颈生成树)

任务4、求最小边最大的生成树(瓶颈生成树)

【输入格式】

  第一行:两个整数N,E(N<=50000,E<=100000),分别表示有N个新岛,E对能直接用电缆连接的岛屿,其中主岛为1。
  接下来M行:每行三个数u,v,w,1<=u,v<=N,表示岛屿u和v之间可以直接用电缆连接,距离为w(<=100000)。

【输出格式】

  第一行一个整数,表示最小生成树的边权和;
  第二行一个整数,表示最大生成树的边权和;
  第三行一个整数,表示最大边最小的生成树中,最大边的权值;
  第四行一个整数,表示最小边最大的生成树中,最小边的权值;

【输入样例】

5 8
1 2 2
1 3 12
1 4 10
2 3 8
2 5 9
3 4 6
3 5 3
4 5 7

【输出样例】

19
39
8
8

【数据范围】

N<=50000,E<=100000

分析:
这道题的解答重点在于思路,要求生成树最优,于是可以采用贪心的办法,先按边权大小进行排序然后不断将边加入无向图中(注意如果在家这条边之前这条边的两个端点就已经连通了就不用考虑这条边了)直到此图变为一棵树,这就是著名的kruskal算法。
并查集+kruskal算法代码实现如下:

#include<cstdio>
#include<cmath>
#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值