pta—紧急救援 (dijkstra)
题目连接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840
题面:
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:
输入第一行给出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
题解:dijkstra计算最短路的长度,结果保存在数组d中,数组path记录最短路的条数。 利用前缀数组pre记录最短路的路径,利用栈输出; 数组val表示每个点的权值,最短路中权值最大的保存在数组tol中。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<stack>
5 using namespace std;
6
7 const int INF=0x3f3f3f3f;
8 const int maxn=510;
9 int pre[maxn],path[maxn],tol[maxn],val[maxn];
10 int cost[maxn][maxn],d[maxn],used[maxn];
11 int n,m;
12
13 void init()
14 {
15 fill(d,d+n,INF);
16 memset(used,0,sizeof used);
17 memset(pre,-1,sizeof pre);
18 }
19
20 void dijkstra(int s)
21 {
22 init();
23 d[s]=0;
24 path[s]=1;
25 tol[s]=val[s];
26 while(1){
27 int v=-1;
28 for(int u=0;u<n;u++)
29 if(!used[u]&&(v==-1||d[u]<d[v])) v=u;
30 if(v==-1) break;
31 used[v]=1;
32 for(int u=0;u<n;u++){
33 if(!used[u]&&cost[u][v]!=INF){
34 if(d[u]>d[v]+cost[v][u]){
35 d[u]=d[v]+cost[v][u];
36 pre[u]=v;
37 path[u]=path[v];
38 tol[u]=tol[v]+val[u];
39 }
40 else if(d[u]==d[v]+cost[v][u]){
41 path[u]+=path[v];
42 if(tol[u]<tol[v]+val[u]){
43 pre[u]=v;
44 tol[u]=tol[v]+val[u];
45 }
46 }
47 }
48 }
49 }
50 }
51
52 void print(int t)
53 {
54 stack<int> q;
55 for(;t!=-1;t=pre[t])
56 q.push(t);
57 while(!q.empty()){
58 int k=q.top();
59 q.pop();
60 printf("%d",k);
61 if(!q.empty()) printf(" ");
62 else printf("\n");
63 }
64 }
65
66 int main()
67 {
68 int s,t;
69 scanf("%d%d%d%d",&n,&m,&s,&t);
70 for(int i=0;i<n;i++)
71 scanf("%d",&val[i]);
72 for(int i=0;i<n;i++){
73 for(int j=0;j<n;j++){
74 if(i!=j) cost[i][j]=INF;
75 }
76 }
77 for(int i=0;i<m;i++){
78 int u,v,w;
79 scanf("%d%d%d",&u,&v,&w);
80 cost[u][v]=cost[v][u]=w;
81 }
82 dijkstra(s);
83 printf("%d %d\n",path[t],tol[t]);
84 print(t);
85 return 0;
86 }
pta—紧急救援 (dijkstra)的更多相关文章
- PTA 紧急救援 /// dijkstra 最短路数 输出路径
题目大意: 给定 n m s t :表示n个点编号为0~n-1 m条边 起点s终点t 接下来一行给定n个数:表示第i个点的救援队数量 接下来m行给定u v w:表示点u到点v有一条长度为w的边 求从s ...
- pta l2-1紧急救援(Dijkstra)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题意:给n个城市,m条边,每个城市 ...
- L2-001. 紧急救援---(Dijkstra,记录路径)
https://www.patest.cn/contests/gplt/L2-001 L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...
- L2-001. 紧急救援 (Dijkstra算法打印路径)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- 城市间紧急救援 Dijkstra
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- 团体程序设计天梯赛-练习集L2-001. 紧急救援(dijkstra)
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
- 天梯 L2 紧急救援 (dijkstra变形+记录路径)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
随机推荐
- Restful API是什么、为什么、怎么使用
Restful API 文章目录 Restful API 1.REST是什么以及它的 6 个限制 REST是什么? REST的6个限制 2. Restful是什么 Restful是什么 RESTful ...
- 摆脱 996——GitHub 热点速览 v.21.03
作者:HelloGitHub-小鱼干 Twitter 有位程序员总结了本周的 GitHub 中文程序员的看点:国内程序员日常--考公务员.996.抢茅台.刷算法.整健康码.在本期热点速览里,小鱼干收录 ...
- 【易筋经】Llinux服务器初始化及常用命令大全
Llinux服务器初始化及常用命令大全 1.关闭防火墙以及内核安全机制 systemctl stop firewalld systemctl disable firewalld ##永久性关闭 set ...
- JVM虚拟机基础
JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机.它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作. Ja ...
- 【原创】Linux虚拟化KVM-Qemu分析(八)之virtio初探
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
- 鸿蒙的多媒体及Menu组件及小程序的多媒体组件
目录: js业务逻辑层 视图渲染层 css属性设置 效果图 微信小程序展示 内网穿透工具下载 我们在搭建一个小程序或者网站的时候,往往要加载很多的图片,音频和视频文件.如果都从服务器获取静态资源,这样 ...
- java.io.IOException: Could not find resource com/xxx/xxxMapper.xml
java.io.IOException: Could not find resource com/xxx/xxxMapper.xml 报错内容: org.apache.ibatis.exception ...
- ACID 原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
https://en.wikipedia.org/wiki/ACID https://zh.wikipedia.org/wiki/ACID //ACID compliant , row-level l ...
- class CacheMiddleware(UpdateCacheMiddleware, FetchFromCacheMiddleware):
class CacheMiddleware(UpdateCacheMiddleware, FetchFromCacheMiddleware):
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError