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 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
随机推荐
- 剑指offer 面试题2:实现Singleton模式
转自:https://blog.csdn.net/liang19890820/article/details/61615495 Singleton 的头文件(懒汉式/饿汉式公用): // single ...
- HAProxy-1.8.20 根据后缀名转发到后端服务器
global maxconn 100000 chroot /data/soft/haproxy stats socket /var/lib/haproxy/haproxy.sock mode 600 ...
- paramunittest参数化测试基础
samples: import paramunittestimport unittest@paramunittest.parametrized( (10,20), (30,40), # (100,20 ...
- 关于java并发场景下,HttpServletRequst中session丢失问题
使用场景: 在list数据进来之后使用安全数组 Lists.newCopyOnWriteArrayList() 进行了 parallelStream 并行处理,在接口中进行了登录者信息接口 ...
- 计算机网络安全 —— 对称加密算法 DES
一.对称加密算法概念 我们通过计算机网络传输数据时,如果无法防止他人窃听, 可以利用密码学技术将发送的数据变换成对任何不知道如何做逆变换人都不可理解的形式, 从而保证了数据的机密性.这种变换被称为加密 ...
- 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境
庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...
- MySQL ---- 锁知识
锁 我们知道mysql中支持很多个存储引擎,在不同的存储引擎下所能支持的锁是不同的,我们通过MyISAM和InnoDB来进行一下对比. 表级锁定(table-level) 表级别的锁定是MySQL ...
- 导出exe的经验
安装pyinstaller 首先要找到scripts的绝对路径(主要是找到scripts就行了 先是安装C:\Users\96290\AppData\Local\Programs\Python\Pyt ...
- Typora+PicGo+Gitee打造图床
前言 自己一直使用的是Typora来写博客,但比较麻烦的是图片粘贴上去后都是存储到了本地,写好了之后放到博客园等地,图片不能直接访问,但如今Typora已经支持图片上传,所以搞了一波图片上传到Gi ...
- UT /SIT/ UAT
UT /SIT/ UAT - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1541268 我们公司只有测试环境--准生产环境--生产环 ...