L2-001 紧急救援 (25 分)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:
输入第一行给出4个正整数N、M、S、D,其中N(2)是城市的个数,顺便假设城市的编号为0 ~ (;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
PTA特色题目 麻烦
经典题目模板 求最短路的数目 求救援队最大的数目
1 #include <stdio.h>
2 #include <iostream>
3 #include <vector>
4 #include <queue>
5 #include <algorithm>
6 #include <stack>
7 using namespace std;
8 int N, M, S, D;
9 const int inf = 2e9;
10 const int si = 505;
11 bool vis[si];
12 struct ed{
13 int to, t;
14 ed(int a, int b) {
15 to = a; t = b;
16 }
17 };
18 struct node{
19 int id, time;
20 node(int a, int b) {
21 id = a; time = b;
22 }
23 bool operator < (const node x) const {
24 return time > x.time;
25 }
26 };
27 vector<ed> G[si];
28 int jiuyuan[si], dis[si], pre[si];
29 int roadcnt[si], getjy[si];
30
31 priority_queue<node> q;
32 void dijkstra() {
33 fill(dis, dis + N , inf);
34 fill(vis, vis + N , 0);
35 dis[S] = 0;
36 roadcnt[S] = 1;
37 getjy[S] = jiuyuan[S];
38 q.push(node(S, 0));
39
40 while (!q.empty()) {
41 node no = q.top(); q.pop();
42 int id = no.id, time = no.time, jy = getjy[id];
43 if (vis[id]) continue;
44 vis[id] = 1;
45 for (int i = 0; i < G[id].size(); i++) {
46 int to = G[id][i].to, t = G[id][i].t;
47 int nt = t + time;
48 int njy = jy + jiuyuan[to];
49 if (dis[to] == nt) {
50 roadcnt[to] += roadcnt[id];
51 if (njy > getjy[to]) {
52 getjy[to] = njy;
53 pre[to] = id;
54 }
55 }
56 else if (dis[to] > nt) {
57 dis[to] = nt;
58 getjy[to] = njy;
59 roadcnt[to] = roadcnt[id];
60 pre[to] = id;
61 q.push(node(to, nt));
62 }
63 }
64 }
65 }
66 int main() {
67 cin >> N >> M >> S >> D;
68 for (int i = 0; i < N; i++)
69 cin >> jiuyuan[i];
70 for (int i = 0; i < M; i++) {
71 int a, b, c;
72 cin >> a >> b >> c;
73 G[a].push_back(ed(b, c));
74 G[b].push_back(ed(a, c));
75 }
76 dijkstra();
77 printf("%d %d\n", roadcnt[D], getjy[D]);
78 int crt = D;
79 stack<int> stk;
80 while (1) {
81 stk.push(crt);
82 if (crt == S) break;
83 crt = pre[crt];
84 }
85 while (1) {
86 cout << stk.top();
87 stk.pop();
88 if (stk.empty()) {
89 cout << endl;
90 break;
91 }
92 else cout << " ";
93 }
94 return 0;
95 }
L2-001 紧急救援 (25 分)的更多相关文章
- 5-5 城市间紧急救援 (25分)【最短路spfa】
5-5 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- 天梯L2-001. 紧急救援(25分)
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
- 城市间紧急救援(25 分)(dijstra变形)
城市间紧急救援(25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标 ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- 7-10 多项式A除以B (25分)(多项式除法)
7-10 多项式A除以B (25分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出 ...
- PTA - - 06-图1 列出连通集 (25分)
06-图1 列出连通集 (25分) 给定一个有NN个顶点和EE条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N-1N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发, ...
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)
01-复杂度2 Maximum Subsequence Sum (25分) Given a sequence of K integers { N1,N2, ..., NK }. ...
随机推荐
- every、some数组方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java中,字符串和集合判断是否为空
字符串: 集合: 不为空
- vue-quill-editor富文本编辑器,上传图片自定义为借口上传
vue-quill-editor富文本编辑器,上传图片自定义为借口上传 博客地址:https://blog.csdn.net/lyj2018gyq/article/details/82585194
- SQL合并
SELECT idName,SUM(Money),SUM(Revenue)FROM ( SELECT agentID AS idName,SUM(totalMoney) AS Money,0 A ...
- Assignments 1
跑了一下之前写的UiPath Assignments脚本,没什么问题,发上来供大家参考. 先看结果: github:https://github.com/WendyZheng1022/RPA 有时间我 ...
- (1)vue点击图片预览(可旋转、翻转、缩放、上下切换、键盘操作)
今天做项目的时候,遇到了新需求,需要把点击图片放大的功能.学习了一下GitHub上的viewerjs插件 GitHub地址:https://github.com/fengyuanchen/viewer ...
- springboot测试的方法
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest( classes = {App.class})@WebAppConfigurationpu ...
- 基于Live555实现RtspServer及高清高分辨率和高码率视频传输优化
基于Live555实现RtspServer及高清高码率视频传输优化 最近做了一些pc和嵌入式平台的RTSP服务器项目,大多数的要求是简单但是功能全面,并且性能还要强劲.综合考虑后,基本都是在基于liv ...
- mybatis源码数据库链接配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration ...
- unity中的UGUI一些组件的使用
一.Toggle Group(Script) LeftButtons上添加Toggle Group组件,属性Allow Switch Off打对勾,代表它的所有子物体上带有Toggle组件的属性Is ...