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】04.二维数组中的查找
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 一文读懂 Kubernetes APIServer 原理
前言 整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁.因此加深 ...
- PAT Advanced 1003 Emergency 详解
题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...
- 一文读懂 TKE 及 Kubernetes 访问权限控制
你有了解过Kubernetes的认证授权链路吗?是否对TKE的权限控制CAM策略.服务角色傻傻分不清楚?本文将会向你介绍腾讯云TKE平台侧的访问控制.Kubernetes访问控制链路,以及演示如何将平 ...
- moco框架加入cookies
一.带cookie信息的get请求 注意:cookie是放在request里的,一般登录的场景这些会用到 1.代码 2.接口管理工具添加 注意:cooike的域和路径都要添加 二.带cookie信息的 ...
- https://github.com/golang/crypto/blob/master/bcrypt/bcrypt.go
https://github.com/golang/crypto/blob/master/bcrypt/bcrypt.go
- (Oracle)取当前日期的最近工作日
描述:现有一需求,日期表中存放了日期和是否节假日(0-工作日,1-节假日),现在需要取日期表中的最近的工作日.如2017/07/23(周日)最近的工作日应该是2017/07/21(周五). ...
- 强连通分量 与 2-SAT
近期一直在刷这方面的题 因为没法学新知识 但又想写点什么 就水篇博文吧 引理 简单来说,在一个有向图中,若所有点之间两两互相直接可达,则将这个图成为强连通分量 强连通分量可以是某个有向图中的子图 求强 ...
- LOJ10163 Amount of Degrees
题目描述 求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 KK 个互不相等的 BB 的整数次幂之和.例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意 输入格 ...
- 成功解决Git:fatal: refusing to merge unrelated histories
Get 报错 如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就给下面的提示 fatal: refusing to merge unre ...