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 }. ...
随机推荐
- C#流程控制语句--分支语句(if,switch,三位运算符)
分支语句:判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 分支语句 if if(判断条件表达式) {//表达式结果为tu ...
- CRM 员工创建并分配用户
REPORT zjp_emp_upload. TABLES: sscrfields. DATA:gt_excel_data TYPE TABLE OF zalsmex_tabline, gs_exce ...
- 磁盘当前目录下存在文件 c1.txt,其中存放了一段英文文字。请编程实现将c1.txt中英文文字全部转换为答谢字母,并保存到c2.txt中。要求:c2.txt文件前面保存的是c1.txt文案中的原始文字,后面紧跟着的是转换后的文字
#include"stdio.h"#include"string.h" void main(){ FILE *fp1,*fp2; char ch[1000]=& ...
- Python3+Flask安装使用教程
一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...
- vs2015网站发布时,设置页面合并后程序集的文件版本
如何将web网站的页面合并成一个新的程序集发布,并设定文件版本? 这个问题我也纠结了很久,问了很多大牛,也没有找到解决方案 曾开了一贴,https://bbs.csdn.net/topics/3910 ...
- SQL Server 主键及自增长列的修改
一.对主键的修改 主键值都会带有主键约束,当执行update操作或是其他操作的时候就会受到限制无法修改,解决的方法是:取消主键约束->删掉主键列->插入修改后的主键值. (1)取消主键约束 ...
- java使用SimpleDateFormat实现字符串和日期的相互转换
public class TimeTwo { public static void main(String[] args) throws ParseException{ String s = &quo ...
- nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效
最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...
- python之路-----python操作 mysql
========================pymysql============================ 一.pymysql 基础 安装命令:pip3 install pymysql - ...
- Java数据库连接池详解
http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...