【天梯赛】L2-001紧急救援(用迪杰斯特拉找出权重和最小的最短路径)
解题反思
尝试DFS:开始使用DFS来遍历求解,但 DFS 存在大量重复计算,像同一节点会被多次访问并重复计算路径信息,导致时间复杂度高,部分测试点未通过
改用迪杰斯特拉:为了求解,设置了很多的辅助数组,对于他们本身的初始化、以及对于起始点S的初始化赋值容易出错,需要小心
迪杰斯特拉相当于是用一次过程找出了所有点的信息,最后只需要按要求输出D对应的信息即可
迪杰斯特拉算法,通过储存每个点的信息,为后续的其他点的信息求取打下了坚实基础,用空间换取了大量时间
题面
L2-001 紧急救援 - 团体程序设计天梯赛-练习集

代码实现
// 定义常量 mx 为整型的最大值,用于表示无穷大
#define mx INT_MAX
#include<bits/stdc++.h>
using namespace std;int main()
{// N 表示城市数量,M 表示道路数量,S 表示起点城市,D 表示终点城市int N,M,S,D;// 从标准输入读取 N、M、S、D 的值cin>>N>>M>>S>>D;// 创建一个大小为 N 的向量 rescue,用于存储每个城市的救援人员数量vector<int>rescue(N);// 循环 N 次,依次读取每个城市的救援人员数量并存入 rescue 向量for(int i=0; i<N; i++) cin>>rescue[i];// 创建一个 N * N 的二维向量 graph,初始值都为 mx(无穷大),用于表示城市间的距离vector<vector<int>>graph(N, vector<int>(N, mx));// 循环 M 次,读取每条道路的信息for(int i=0; i<M; i++){// a 和 b 表示道路连接的两个城市,len 表示道路的长度int a, b, len;// 从标准输入读取 a、b、len 的值cin>>a>>b>>len;// 无向图,两个城市间的距离是对称的,更新 graph 矩阵graph[a][b] = len;graph[b][a] = len;}//// 存储从起点到每个城市的最短距离,初始值为 mx(无穷大)vector<int>dist_(N, mx);// 存储从起点到每个城市能召集到的最大救援人员数量,初始值为 0vector<int>re_rescue(N, 0);// 存储从起点到每个城市的最短路径数量,初始值为 0vector<int>path_cnt(N, 0);// 标记每个城市是否已经确定最短路径,初始值为 falsevector<bool>visited(N, false);// 存储每个城市在最短路径中的前驱城市,初始值为 -1vector<int>pre(N, -1);//// 起点到自身的距离为 0dist_[S] = 0;// 起点的前驱城市是自身pre[S] = S;// 起点到自身的最短路径数量为 1path_cnt[S] = 1;// 起点能召集到的救援人员数量就是起点城市本身的救援人员数量re_rescue[S] = rescue[S];// 迪杰斯特拉算法核心循环,循环 N 次for(int i=0; i<N; i++){// 用于记录当前未确定最短路径的城市中距离起点最近的城市编号,初始值为 -1int u = -1;// 记录当前找到的最小距离,初始值为 mx(无穷大)int min_len = mx;// 遍历所有城市for(int j=0; j<N; j++){// 如果该城市未确定最短路径且距离起点的距离小于当前最小距离if(!visited[j] && dist_[j] < min_len){// 更新最小距离min_len = dist_[j];// 更新最近城市编号u = j;}}// 如果没有找到符合条件的城市,说明所有可达城市都已确定最短路径,退出循环if(u == -1) break;// 标记该城市已确定最短路径visited[u] = true;// 遍历所有城市,更新与 u 相邻城市的信息for(int j=0; j<N; j++){// 如果 u 到 j 有道路且通过 u 到 j 的距离比当前记录的距离更短if(graph[u][j] != mx && dist_[j] > dist_[u] + graph[u][j]){// 更新 j 到起点的最短距离dist_[j] = dist_[u] + graph[u][j];// 更新 j 的前驱城市为 upre[j] = u;// 更新 j 的最短路径数量为 u 的最短路径数量path_cnt[j] = path_cnt[u];// 更新 j 能召集到的最大救援人员数量re_rescue[j] = re_rescue[u] + rescue[j];}// 如果 u 到 j 有道路且通过 u 到 j 的距离与当前记录的距离相等else if(graph[u][j] != mx && dist_[j] == dist_[u] + graph[u][j]){// 累加 j 的最短路径数量path_cnt[j] += path_cnt[u];// 如果通过 u 到 j 能召集到更多的救援人员if(re_rescue[j] < re_rescue[u] + rescue[j])//比较救援人数大小{// 更新 j 的前驱城市为 upre[j] = u;// 更新 j 能召集到的最大救援人员数量re_rescue[j] = re_rescue[u] + rescue[j];}}}}// 输出从起点到终点的最短路径数量和能召集到的最大救援人员数量cout<<path_cnt[D]<<" "<<re_rescue[D]<<endl;// 回溯找路径// 创建一个栈 help 用于存储路径stack<int>help;// 从终点开始回溯int cur = D;// 将终点压入栈中help.push(cur);// 当当前城市的前驱城市不是自身时,继续回溯while(pre[cur] != cur){// 更新当前城市为其前驱城市cur = pre[cur];// 将当前城市压入栈中help.push(cur); }// 依次弹出栈中的元素并输出路径while(!help.empty()){// 获取栈顶元素cur = help.top();// 弹出栈顶元素help.pop();// 输出当前城市编号cout<<cur;// 如果栈不为空,输出空格分隔if(help.empty()) break;cout<<" ";}// 换行cout<<endl;return 0;
}
~希望对你有启发!~
相关文章:
【天梯赛】L2-001紧急救援(用迪杰斯特拉找出权重和最小的最短路径)
解题反思 尝试DFS:开始使用DFS来遍历求解,但 DFS 存在大量重复计算,像同一节点会被多次访问并重复计算路径信息,导致时间复杂度高,部分测试点未通过 改用迪杰斯特拉:为了求解,设置了很多的辅助…...
PortSwigger——WebSockets vulnerabilities
文章目录 一、WebSockets二、Lab: Manipulating WebSocket messages to exploit vulnerabilities三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities四、Using cross-site WebSockets to exploit vulnerabilities4.1 跨站WebSocket劫持(cro…...
八、OSG学习笔记-
前一章节: 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码: OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…...
自己动手实现一个简单的Linux AI Agent
大模型带我们来到了自然语言人机交互的时代 1、安装本地大模型进行推理 下载地址: https://ollama.com/download 部署本地deepseek和嵌入模型 ollama run deepseek-r1:7b2、制定Linux操作接口指令规范 3、编写大模型对话工具 #!/usr/bin/python3 #coding: utf-8…...
常见的数据仓库有哪些?
数据仓库(Data Warehouse,简称数仓)是企业用于存储、管理和分析大量数据的重要工具,其核心目标是通过整合和处理数据,为决策提供高质量、一致性和可信度的数据支持。在构建和使用数仓时,选择合适的工具和技术至关重要。以下是常见的数仓工具及其特点的详细介绍: 1. Hiv…...
LSTM 学习笔记 之pytorch调包每个参数的解释
0、 LSTM 原理 整理优秀的文章 LSTM入门例子:根据前9年的数据预测后3年的客流(PyTorch实现) [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…...
计算机网络,大白话
好嘞,咱就从头到尾,给你好好说道说道计算机网络里这些“门门道道”的概念: 1. 网络(Network) 啥是网络? 你可以把网络想象成一个“大Party”,大家(设备)聚在一起&#…...
自定义sort排序
数组中,根据出现次数以大到小排序,当频率相同时按元素值降序排序 #include <iostream> #include <vector> #include <algorithm> #include <unordered_map>// 全局的 unordered_map 用于存储元素频率 std::unordered_map<in…...
【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA
【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…...
kafka动态监听主题
简单版本 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; import org.springframework.kafka.listener.Containe…...
【PHP的static】
关于静态属性 最简单直接:静态方法也是一样 看了很多关于静态和动态的说法,无非是从 调用方式, 类访问实例变量, 访问静态变量, 需不要实例化这几个方向,太空了。问使用场景,好一点的 能说个…...
国产编辑器EverEdit - 光标位置跳转
1 光标位置跳转 1.1 应用场景 某些场景下,用户从当前编辑位置跳转到别的位置查阅信息,如果要快速跳转回之前编辑位置,则可以使用光标跳转相关功能。 1.2 使用方法 1.2.1 上一个编辑位置 跳转到上一个编辑位置,即文本修改过的位…...
cv2.Sobel
1. Sobel 算子简介 Sobel 算子是一种 边缘检测算子,通过对图像做梯度计算,可以突出边缘。 Sobel X 方向卷积核: 用于计算 水平方向(x 方向) 的梯度。 2. 输入图像示例 假设我们有一个 55 的灰度图像,像素…...
51单片机俄罗斯方块整行消除函数
/************************************************************************************************************** * 名称:flash * 功能:行清除动画 * 参数:NULL * 返回:NULL * 备注: * 采用非阻塞延时࿰…...
鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同,业务逻辑不同2.2、类型1和类型2布局不同,但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…...
langchain系列(二)- 提示词以及模板
导读 环境:OpenEuler、Windows 11、WSL 2、Python 3.12.3 langchain 0.3 背景:前期忙碌的开发阶段结束,需要沉淀自己的应用知识,过一遍LangChain 时间:20250212 说明:技术梳理 提示词模板理论说明 提…...
Openssl的使用,CA证书,中间证书,服务器证书的生成与使用
证书教程 1、Openssl相关文档2、生成证书命令初步解释3、准备openssl的配置文件 openssl.cnf4、证书生成4.1、生成根证书、CA根证书、自签名证书4.2、生成服务器证书4.3、生成中间证书4.3、使用中间证书生成服务器证书5、使用openssl操作证书5.1 查看证书内容5.2 进行证书测试5…...
深入浅出:Python 中的异步编程与协程
引言 大家好,今天我们来聊聊 异步编程 和 协程,这是近年来编程语言领域中的热点话题之一,尤其在 Python 中,它作为一种全新的编程模型,已经成为处理 IO密集型 任务的强力工具。尽管很多人对异步编程望而却步࿰…...
Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行
文章目录 Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…...
Unity使用iTextSharp导出PDF-04图形
坐标系 pdf文档页面的原点(0,0)在左下角,向上为y,向右为x。 文档的PageSize可获取页面的宽高数值 单位:像素 绘制矢量图形 使用PdfContentByte类进行绘制,注意文档打开后才有此对象的实例。 绘制方法 …...
[SAP ABAP] OO ALV报表练习1
销售订单明细查询报表 业务目的:根据选择屏幕的筛选条件,使用 ALV 报表,显示销售订单详情 效果展示 用户的输入条件界面 用户的查询结果界面 涉及的主要功能点: 1.当在销售订单明细查询页面取不到任何数据时,在选择…...
安卓基础(第一集)
SharedPreferences(本地存储简单数据) 在 Android 中,SharedPreferences 用于存储小型数据。 (1)存储数据 // 获取 SharedPreferences 对象 SharedPreferences sharedPreferences getSharedPreferences("MyPre…...
数据库高安全—数据保护:数据动态脱敏
书接上文数据库高安全—审计追踪:传统审计&统一审计,从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读,本篇将从数据动态脱敏方面对高斯数据库的数据保护技术进行解读。 5.1 数据动态脱敏 数据脱敏,顾名思义就…...
Datawhale 数学建模导论二 2025年2月
第6章 数据处理与拟合模型 本章主要涉及到的知识点有: 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论,如果对这部分内容不熟悉,可以参考相关概率论与数理统计的…...
ArcGIS Enterprise 与 ArcGIS Online 的关系
ArcGIS Enterprise 和 ArcGIS Online 是 Esri 提供的两款核心产品,它们在功能、部署方式和使用场景上存在显著差异,但同时也有一定的联系和互补性。以下是关于这两款产品的详细关系说明: 1. 产品定位与功能 ArcGIS Enterprise 是一款企业级解决方案,支持在组织的基础设施上…...
ASP.NET Core SignalR实践指南
Hub类的生命周期是瞬态的,每次调用集线器的时候都会创建一个新的Hub类实例,因此不要在Hub类中通过属性、成员变量等方式保存状态。如果服务器的压力比较大,建议把ASP.NET Core程序和SignalR服务器端部署到不同服务器上,以免它们互…...
【力扣 - 简单题】88. 合并两个有序数组
题目:88. 合并两个有序数组 - 力扣(LeetCode) 解题: class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for (int i m; i < n m; i ){nums1[i] nums2[i -…...
【密评】 | 商用密码应用安全性评估从业人员考核题库(23)
在GM/T0048《智能密码钥匙密码检测规范》中,产品的对称算法性能应满足哪个标准中的要求()。 A.GM/T 0016《智能密码钥匙密码应用接口规范》 B.GM/T 0017《智能密码钥匙密码应用接口数据格式规范》 C.GM/T 0027《智能密码钥匙技术规范》 D.GM/T 0028《密码模块安全技术要求》…...
记录 | WPF基础学习MVVM例子讲解1
目录 前言一、NotificationObject与数据属性创建个类,声明NotificationObject 二、DelegateCommand与命令属性三、View与ViewModel的交互(难点)在ViewModel文件下创建MainWindowViewModel数据和方法绑定资源指定 代码下载四、优势体现代码下载…...
PyTorch 中 `torch.cuda.amp` 相关警告的解决方法
在最近的写代码过程中,遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…...
