团体程序设计天梯赛 L2-001 紧急救援(迪杰斯特拉算法)

L2-001 紧急救援

分数 25

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

题解

根据题意,很容易想到这是要用最短路算法,但求的不是最短路径,而是最短路的数目和一堆奇奇怪怪的东西。

最短路的数目可以在判断最短路的时候就加上去,详见洛谷P1144最短路计数。

题目还要求在路径最短的同时还要救援队最多,那么在遇到两个同样长的路径时,判断哪条路的救援队加起来更多,以此作为判断依据来更新路径。

最后记录一整条路径,输出就好了。 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf=1e9;
const int N=505;
ll n,m,s,d;
ll dis[N],vis[N];//dis是起点到i点的最短路径
ll jy[N];
ll ms[N];//最短路径条数
ll maxjy[N];//没用上
ll fa[N];//记录该点的父节点
ll ans[N];//当前点最多的救援队数量
ll sum;
vector<pair<int,int> > g[N];//用vector存图
vector<ll> path;//存放路径
ll out[N];
//迪杰斯特拉算法
void Dij(ll s)
{for(int i=0;i<n;i++){dis[i]=inf;}dis[s]=0;priority_queue<pair<ll,int> > q;for(int i=0;i<n;i++){q.push(make_pair(-dis[i],i));}while(!q.empty()){int u=q.top().second;q.pop();if(vis[u]==1) continue;vis[u]=1;for(int i=0;i<g[u].size();i++){int v=g[u][i].first;int w=g[u][i].second;if(dis[v]>dis[u]+w)//是最短路就更新{dis[v]=dis[u]+w;ms[v]=ms[u];fa[v]=u;ans[v]=ans[u]+jy[v];q.push(make_pair(-dis[v],v));}else if(dis[v]==dis[u]+w)//遇到同样短的路{ms[v]+=ms[u];if(ans[v]<ans[u]+jy[v])//判断谁的救援队多{fa[v]=u;//更新ans[v]=ans[u]+jy[v];}}}}
}
//记录路径
void getPath(ll s,ll d)
{path.push_back(d);while(d!=s){d=fa[d];path.push_back(d);}reverse(path.begin(),path.end());int i=0;for(auto k:path){i++;out[i]=k;}
}
int main()
{cin>>n>>m>>s>>d;for(int i=0;i<n;i++){cin>>jy[i];}while(m--){int x,y,w;cin>>x>>y>>w;//双向存图g[x].push_back(make_pair(y,w));g[y].push_back(make_pair(x,w));}//初始化ms[s]=1;ans[s]=jy[s];Dij(s);getPath(s,d);//输出cout<<ms[d]<<" ";cout<<ans[d]<<endl;for(int i=1;i<=path.size()-1;i++){cout<<out[i]<<" ";}cout<<out[path.size()]<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python笔记_运算符

A&#xff0c;算术运算符 运算符描述举例结果加011-减2-11*乘1*11/除1/11%取模&#xff08;取余&#xff09;6%51&#xff08;余1&#xff09;//除&#xff0c;且向下取整 3//2 -1//2 1 -1 **返回x的y次幂2**01 取模运算公式 a % b a - a // b * b print&#xff08;-10%…

【复现】蓝凌OA SQL注入漏洞_61

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 蓝凌智能OA是由深圳市蓝凌软件股份有限公司开发&#xff0c;是一款针对中小企业的移动化智能办公产品&#xff0c;融合了钉钉数字…

C习题002:澡堂洗澡【仅供参考】

问题 输入样例 在这里给出一组输入。例如&#xff1a; 2 5 1 3 3 2 3 3 输出样例 在这里给出相应的输出。例如&#xff1a; No代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 代码 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…

递归算法题练习(数的计算、带备忘录的递归、计算函数值)

递归的介绍 概念:递归是指函数直接或间接调用自身的过程。 解释递归的两个关键要素: 基本情况(递归终止条件):递归函数中的一个条件&#xff0c;当满足该条件时&#xff0c;递归终止&#xff0c;避免无限递归。可以理解为直接解决极小规模问题的方法。递归表达式(递归调用):递…

k8s 中 namspace deployment pod services 之间的关系

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Namespace&#xff08;命名空间&#xff09;是一种用于将集群内部资源划分为不同逻辑组的机制。Deployment、Pod和Service是Kubernetes中常见的资源&#xff0c;它们之间的关系如下&#xff1a; Namespace&#xff08;命…

网络安全攻防演练:企业蓝队建设指南

第一章 概述 背景 网络实战攻防演习是当前国家、重要机关、企业组织用来检验网络安全防御能力的重要手段之一,是对当下关键信息系统基础设施网络安全保护工作的重要组成部分。网络攻防实战演习通常是以实际运行的信息系统为攻击目标,通过在一定规则限定下的实战攻防对抗,最…

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

目录 引出认识通讯协议1、TCP/IP协议&#xff0c;UDP协议的区别2、HTTP通讯协议的讲解 Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 认识通讯协议——TCP/IP、UDP协议的区别&#xff0c;HTTP通讯协议的理解 认识通讯协议 …

第九届数学与人工智能国际会议 (ICMAI 2024)即将召开!

2024年第九届数学与人工智能国际会议将于2024年5月10-12日在中国北京召开。本届会议由北京工业大学主办&#xff0c;旨在促进应用逻辑、算法与复杂性研究&#xff0c;使用数学的方法促进人工智能理论与应用发展&#xff0c;加深学术交流与合作。我们热忱欢迎从事相关技术研究的…

开源WIFI继电器之使用说明

1、设备说明 1.1外观 1.2供电 100~240V交流输入&#xff0c;Lin接火线&#xff0c;Nin接零线。 1.3连接负载 输出信号为继电器无源信号&#xff0c;用于信号的导通和断开控制&#xff0c;最大可通过10A负载电流&#xff0c;COM为继电器公共端&#xff0c;NO为继电器常开端&a…

蓝牙耳机推荐高性价比,五大超好用蓝牙耳机推荐,赶紧上车!

​随着技术的不断进步&#xff0c;蓝牙耳机的性能和配置也在不断提升&#xff0c;各大品牌都在推出具有各种特色的产品。其中&#xff0c;音质是很多消费者最为关注的一点。因此&#xff0c;我在这里为大家推荐几款音质表现还不错的几款蓝牙耳机&#xff0c;供大家参考。 一、挑…

SpringAOP

1. SpringAOP的基本概念 SpringAOP&#xff08;Aspect-Oriented Programming&#xff09;即面向切面编程&#xff0c;是Spring框架体系中非常重要的功能模块之一。AOP与OOP&#xff08;面向对象编程&#xff09;相辅相成&#xff0c;提供了一种与OOP不同的抽象软件结构的视图。…

Java毕业设计 基于SSM SpringBoot vue购物比价网站

Java毕业设计 基于SSM SpringBoot vue购物比价网站 SSM vue 购物比价网站 功能介绍 首页 图片轮播 商品 商品分类 商品详情 评论 收藏 商品攻略 商品信息 公告栏 在线反馈 登录 注册 个人中心 我的收藏 后台管理 登录 注册商品户 个人中心 修改密码 个人信息 商品户管理 用户…

IDC 中搭建 Serverless 应用平台:通过 ACK One 和 Knative 玩转云资源

作者&#xff1a;元毅、庄宇 如何打造云上&#xff08;公共云&#xff09;、云下&#xff08;IDC 数据中心&#xff09;统一的云原生 Serverless 应用平台&#xff0c;首先我们来看一下 ChatGPT 4 会给出什么样的答案&#xff1a; 如何打造云上、云下统一的云原生 Serverless…

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

引入倾斜模型数据 // 加载3DTiles数据let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中viewer.value.zoomTo(tileset); // 视角定位到倾…

【音视频处理】使用ffmpeg实现多个视频合成一个视频(按宫格视图)

先上结果 环境 硬件&#xff1a;通用PC 系统&#xff1a;Windows 测试有效 软件&#xff1a;ffmpeg 解决 0、命令 ffmpeg.exe -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scaleiw/2:ih/2,pad2*iw:2*ih[a]; [1:v]scaleiw/2:ih/2…

GO学习记录

这里写目录标题 00 环境二级目录三级目录 00 环境 参考的&#xff1a;https://www.liwenzhou.com/posts/Go/install/ 编译运行&#xff1a; go mod init <项目名> // 在目录下创建项目 go mod init hello // 编译二级目录 三级目录

BioTech - 大分子药物设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136302202 大分子药物设计领域主要包括3个方面&#xff0c;即大环类药物设计、蛋白质与多肽类药物设计、核酸药物设计等&#xff0c;具体如下&…

selenium控制控件出现StaleElementReferenceException

attempts0while attempts<2:try:ywbh_text self.getElement(self.driver, //*[id"board_data"]/tbody/tr[1]/td[2])ywbh_text.click()config.zscjhbgbz_ywbh ywbh_text.textprint("保存业务编号&#xff1a;"ywbh_text.text"到conf中 zscjhbgbz_…

DolphinScheduler——奇富科技的调度实践

目录 一、技术架构 二、业务挑战 2.1 调度任务量大 2.2 运维复杂 2.3 SLA要求高 三、调度优化实践 3.1 重复调度 3.2 漏调度 3.3 Worker服务卡死 3.4 任务重复运行 四、服务监控 4.1 方法耗时监控 4.2 任务调度链路监控 五、用户收益 原文大佬的这篇调度系统案例…

nginx使用详解--缓存

Nginx 是一个功能强大的 Web 服务器和反向代理服务器&#xff0c;它可以用于实现静态内容的缓存&#xff0c;缓存可以分为客户端缓存和服务端缓存。 客户端缓存 客户端缓存指的是浏览器缓存, 浏览器缓存是最快的缓存, 因为它直接从本地获取(但有可能需要发送一个协商缓存的请…