题目:

本题使用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++)的更多相关文章

  1. L2-001. 紧急救援

    L2-001. 紧急救援 题目链接:https://www.patest.cn/contests/gplt/L2-001 Dijstra 本题是dijstra的拓展,在求最短路的同时,增加了不同的最短 ...

  2. L2-001. 紧急救援---(Dijkstra,记录路径)

    https://www.patest.cn/contests/gplt/L2-001 L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...

  3. 团体程序设计天梯赛-练习集L2-001. 紧急救援(dijkstra)

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  4. 团体程序设计天梯赛-练习集L1-023. 输出GPLT

    L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...

  5. 2016年团体程序设计天梯赛-决赛 L1-2. I Love GPLT(5)

    这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了. 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车. #i ...

  6. PAT 团体程序设计天梯赛-练习集 L1-023. 输出GPLT

    给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按“GPLTGPLT....”这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的,若某 ...

  7. L1-023 输出GPLT (20 分)

    L1-023 输出GPLT (20 分) 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区 ...

  8. L2-001 紧急救援 (25 分)

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  9. 天梯赛 L2-001 紧急救援

    L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...

随机推荐

  1. JavaScript this的理解

    一直对js的this不怎么理解,最近看了JavaScript 语言精髓的相关章节,有点清晰的理解了,记录记录 /* 来自: JavaScript 语言精髓 方法:当一个函数被定义为对象的一个属性时,我 ...

  2. python方面

    (113条消息) re.sub()用法的详细介绍_jackandsnow的博客-CSDN博客_re sub Python slice() 函数 | 菜鸟教程 (runoob.com) (111条消息) ...

  3. Springmvc入门基础(一) ---基于idea创建demo项目

    Springmvc是什么 Springmvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图: Springmvc处理流程 ---- ...

  4. Oracle入门基础(九)一一创建表和管理表

    练习:查询每一年入职人数及总人数 SQL> select count(*) Total, 2 sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) & ...

  5. C++模板学习之优先队列实现

    转载:https://www.cnblogs.com/muzicangcang/p/10579250.html 今天将继续将强C++模板类的学习,同时为了巩固已经学习过的数据结构中有关优先队列的知识, ...

  6. Javascript 占位符替换

    String.prototype.format=function(){ if(arguments.length===0){ return String(this); } let reg=/(\{\d\ ...

  7. 什么是持续集成(CI)?

    持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程. 这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共 享代码和单元测试.

  8. 学习MySql(一)

    一.安装部署mysql 1.安装mysql: # yum -y install autoconf libaio libaio-devel # groupadd mysql # useradd -r - ...

  9. 学习Docker(二)

    一.Docker快速入门 Docker 改变了什么? 1.简化配置 2.流水线管理 3.应用隔离 4.提高开发效率 5.快速部署 6.面向产品:产品交付 7.面向开发:简化环境配置 8.面向测试:多版 ...

  10. 《剑指offer》面试题3:二维数组中的查找

    面试题3:二维数组中的查找 面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的个二维数组和一个整数,判 ...