53. 寻宝(第七期模拟笔试)(最小生成树练习)

2023-10-30 03:30

本文主要是介绍53. 寻宝(第七期模拟笔试)(最小生成树练习),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本题链接:卡码网KamaCoder

题目:

样例:

输入
7 11
1 2 1
1 3 1
1 5 2
2 6 1
2 4 2
2 3 2
3 4 1
4 5 1
5 6 2
5 7 1
6 7 1
输出
6

思路:

        由题意,这里是需要遍历完全部的顶点,求遍历完全部点的花费最短距离。

从题干‘每个顶点都要访问一遍’,我们就应该联想到最小生成树,最小生成树中,有朴素版Prim最小生成树算法,和并查集的优化版Kruskal算法,由于这里的数据范围较大,所以我们应该使用并查集的优化版Kruskal算法。

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;int n,m,ans;// 定义结点之间和边权的关系结构体,并定义数组
struct Edge
{int a,b,w;// 定义排序规则,将边权最小的放在前面inline bool operator<(const Edge&t)const{return w < t.w;}	
}edge[N];umap<int,int>p;	// 标记的结点集合// 集合查找根节点函数
inline int Find(int &x)
{int t = x;while(x != p[x]) x = p[x];p[t] = x;	// 剪枝路径操作return x;
}inline void Kruskal()
{// 排序好最小边权,我们优先连接最小边权的结点sort(edge,edge + m);// 初始化各个结点的连接根节点为本身for(int i = 0;i <= n;++i) p[i] = i;// 遍历每一条边权关系for(int i = 0;i < m;++i){// 获取存储关系的两个结点int a = edge[i].a;int b = edge[i].b;// 查找对应结点的根节点a = Find(a),b = Find(b);if(a != b){// 如果这两个结点未连接,我们将它们连接起来p[a] = b;ans += edge[i].w;	// 累加最小边权}}return ;
}inline void solve()
{// 输入各个信息cin >> n >> m;for(int i = 0;i < m;++i){int a,b,w;cin >> a >> b >> w;// 存储记录好结点的边权关系edge[i] = {a,b,w};}// 开始克鲁斯卡尔算法Kruskal();// 输出答案cout << ans << endl;
}int main()
{
//	freopen("a.txt", "r", stdin);IOS;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}

最后提交:

这篇关于53. 寻宝(第七期模拟笔试)(最小生成树练习)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305294

相关文章

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景