【GPLT】 紧急救援(c++)
题目:
本题使用Dijkstra算法,但在模板上进行了一定的扩展,是一道不错的最短路题目。
AC代码:
1 #include<iostream>
2 #include<cmath>
3 #include<map>
4 #include<cstring>
5 #include<string>
6 using namespace std;
7 int n,m,start,ed;
8 int p[550];//550是防止越界,也可以写510什么的,看个人习惯
9 int g[550][550];
10 int cnt[550],sum[550];//cnt 是最短路径数 sum是救援队数量
11 bool st[550];//标志这个点是否抵达过
12 int f[550];//记录的是经过的点,这题可以理解成记录下标
13 int dist[550];
14 void print(int start,int ed)
15 {
16 if(ed==start)
17 {
18 cout<<start;
19 return;//起点就是终点
20 }
21 print(start,f[ed]);//递归不断回去,注意用DFS思想,从深向浅递归
22 cout<<" "<<ed;
23 }
24 void dj()
25 {
26 memset(dist,0x3f,sizeof dist);
27 dist[start]=0,cnt[start]=1,sum[start]=p[start];//初始化
28 for(int i=0;i<n;i++)
29 {
30 int t=-1;
31 for(int j=0;j<n;j++)
32 {
33 if(!st[j]&&(t==-1||dist[t]>dist[j])) t=j;//取最短点
34 }
35 st[t]=true;
36 for(int j=0;j<n;j++)
37 {
38 if(dist[j]>dist[t]+g[t][j])//就是最短路变化
39 {
40 f[j]=t;//记录路径,从t到j
41 dist[j]=dist[t]+g[t][j];//变化最短路
42 cnt[j]=cnt[t];//变化次数
43 sum[j]=sum[t]+p[j];//最短路径变化后
44 }
45 else if(dist[j]==dist[t]+g[t][j])
46 {
47 if(sum[j]<sum[t]+p[j])//救援队少的时候,变化路径
48 {
49 f[j]=t;
50 sum[j]=sum[t]+p[j];
51 }
52 cnt[j]=cnt[j]+cnt[t];//两个最短路方式的相加
53 }
54 }
55 }
56 }
57 int main()
58 {
59 cin>>n>>m>>start>>ed;
60 for(int i=0;i<n;i++) cin>>p[i];
61 memset(g,0x3f,sizeof g);//设现在每一个城市间为正无穷的距离
62 for(int i=0;i<m;i++)
63 {
64 int a,b,c;
65 cin>>a>>b>>c;
66 g[a][b]=g[b][a]=min(g[a][b],c);//防止重边
67 }
68 dj();
69 cout<<cnt[ed]<<" "<<sum[ed]<<endl;
70 print(start,ed);
71 return 0;
72 }
【GPLT】 紧急救援(c++)的更多相关文章
- L2-001. 紧急救援
L2-001. 紧急救援 题目链接:https://www.patest.cn/contests/gplt/L2-001 Dijstra 本题是dijstra的拓展,在求最短路的同时,增加了不同的最短 ...
- L2-001. 紧急救援---(Dijkstra,记录路径)
https://www.patest.cn/contests/gplt/L2-001 L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...
- 团体程序设计天梯赛-练习集L2-001. 紧急救援(dijkstra)
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
- 团体程序设计天梯赛-练习集L1-023. 输出GPLT
L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...
- 2016年团体程序设计天梯赛-决赛 L1-2. I Love GPLT(5)
这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了. 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车. #i ...
- PAT 团体程序设计天梯赛-练习集 L1-023. 输出GPLT
给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按“GPLTGPLT....”这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的,若某 ...
- L1-023 输出GPLT (20 分)
L1-023 输出GPLT (20 分) 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区 ...
- L2-001 紧急救援 (25 分)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- 天梯赛 L2-001 紧急救援
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
随机推荐
- 深度学习工具LabelXml安装教程
LabelXml安装教程 1,下载LabelXml工具 前往github上下载labelxml,官网地址如下:https://github.com/tzutalin/labelImg 下载打包源码为z ...
- loj#6072 苹果树(折半搜索,矩阵树定理,容斥)
loj#6072 苹果树(折半搜索,矩阵树定理,容斥) loj 题解时间 $ n \le 40 $ . 无比精确的数字. 很明显只要一个方案不超过 $ limits $ ,之后的计算就跟选哪个没关系了 ...
- Spring Boot 传参 序列化和反序列化
序列化 反序列化
- ZooKeeper 面试题?
ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群 中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终,将简单易用 的接口和性能高效.功能稳定的系统提供给用户. ...
- producer内存管理分析
1 概述 kafka producer调用RecordAccumulator#append来将消息存到本地内存.消息以TopicPartition为key分组存放,每个TopicPartition对应 ...
- Element-UI资源原型库
Element-UI v2.0.0版本 Axure和Sketch库: 链接:https://pan.baidu.com/s/1LdsEh8BKQBjcWBKV5yQilQ 提取码:1xqn
- Redis 的同步机制了解么?
Redis 可以使用主从同步,从从同步.第一次同步时,主节点做一次 bgsave, 并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制 节点,复制节点接受完成后将 r ...
- js Object扩展自定义方法,jQuery抛出 Uncaught TypeError: matchExpr[type].exec is not a function
使用Jquery的时候,想在Object原型上添加自己扩展的方法的时候,启动项目之后,打开网页就会报如上错误信息,经过测试,可以在Object下的具体类型上进行扩展自定义方法,如String,Arra ...
- 使用kindeditor
首先在http://kindeditor.net/demo.php下载样式 点击右上角的下载按钮 点击官方下载下载之后解压出来 然后在桌面创建一个文件夹 然后回到刚才的http://kindedito ...
- 你对 Spring Boot 有什么了解?
事实上,随着新功能的增加,弹簧变得越来越复杂.如果必须启动新的 spring 项 目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring 配置.所以一切都必须从头开始 ...