https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出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

代码:

#include <bits/stdc++.h>
using namespace std; const int inf = 0x3f3f3f3f;
int mp[550][550];
int N, M, S, D;
int dis[550], vis[550], team[550], pre[550], ha[550], num[550]; void dijkstra(int act) {
dis[act] = 0;
pre[act] = -1;
ha[act] = team[act];
num[act] = 1; for(int i = 0; i < N; i ++) {
int minn = inf;
int temp = -1;
for(int j = 0; j < N; j ++) {
if(vis[j]) continue;
if(temp == -1) temp = j;
if(dis[j] < minn || dis[j] == minn && ha[j] > ha[temp]) {
minn = dis[j];
temp = j;
}
} if(temp == -1) break;
vis[temp] = 1;
for(int k = 0; k < N; k ++) {
if(vis[k]) continue;
if(mp[temp][k] == inf) continue; if(dis[k] > dis[temp] + mp[temp][k]) {
dis[k] = dis[temp] + mp[temp][k];
ha[k] = ha[temp] + team[k];
pre[k] = temp;
num[k] = num[temp];
} else if(dis[k] == dis[temp] + mp[temp][k]) {
num[k] += num[temp]; if(ha[temp] + team[k] > ha[k]) {
ha[k] = ha[temp] + team[k];
pre[k] = temp;
}
}
}
}
} int main() {
scanf("%d%d%d%d", &N, &M, &S, &D);
for(int i = 0; i < N; i ++)
scanf("%d", &team[i]); memset(mp, inf, sizeof(mp));
memset(dis, inf, sizeof(dis));
memset(vis, 0, sizeof(vis));
for(int i = 0; i < M; i ++) {
int st, en, val;
scanf("%d%d%d", &st, &en, &val);
mp[st][en] = mp[en][st] = val;
} dijkstra(S); printf("%d %d\n", num[D], ha[D]); stack<int> s;
int last = D;
while(last != -1) {
s.push(last);
last = pre[last];
} printf("%d", s.top());
s.pop();
while(!s.empty()) {
printf(" %d", s.top());
s.pop();
}
return 0;
}

  $O(N^2)$

被学分支配的恐惧 算来算去算不清 选课是最让 Zlrrr 头大的事情了

PAT L2-001 紧急救援的更多相关文章

  1. loj#6072 苹果树(折半搜索,矩阵树定理,容斥)

    loj#6072 苹果树(折半搜索,矩阵树定理,容斥) loj 题解时间 $ n \le 40 $ . 无比精确的数字. 很明显只要一个方案不超过 $ limits $ ,之后的计算就跟选哪个没关系了 ...

  2. PAT - L2-001. 紧急救援( Dijstra )

    - PAT - L2-001. 紧急救援 题目链接 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两 ...

  3. pat 团体天梯赛 L2-001. 紧急救援

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  4. 天梯 L2 紧急救援 (dijkstra变形+记录路径)

    L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...

  5. Day 001:PAT练习--1091 N-自守数 (15 分)

      体验了一阵子现代生活后,朕发现敲代码还是挺有意思的.所以从今天开始,小编秦始皇开始记录朕做PAT题目的过程辣,那话不多说,开始今天的题目了: 题目描述:   如果某个数 K 的平方乘以 N 以后, ...

  6. PAT 天梯赛 L2-1 紧急救援

    Dijkstra算法扩展 题目链接 解题代码如下: #include<cstdio> #include<iostream> #include<algorithm> ...

  7. L2-001. 紧急救援(PAT)~最短路应用

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  8. 【EMV L2】2CS.001.00 ~ 2CS.007.00

    测试case要求,对于T=0和T=1卡,命令中是否存在Le是有差异的: - Select: Mandatory Command00 A4 04 00 Lc Command Data LeLc = 05 ...

  9. 天梯杯 PAT L2-001. 紧急救援 最短路变形

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

随机推荐

  1. .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别

    前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错.但还是有一些开发者发出了疑问,.NET Core.Xamarin..NET Standard和.NET ...

  2. go标准库的学习-strings-字符串操作

    参考https://studygolang.com/pkgdoc 导入方式: import "strings" strings包实现了用于操作字符的简单函数. 常用的几个函数: f ...

  3. mysql5.6.8源码安装

    内核: [root@opop ~]# cat /etc/centos-release CentOS release 6.8 (Final)[root@opop ~]# uname -aLinux op ...

  4. android 之TCP客户端编程

    补充,由于这篇文章是自己入门的时候写的,随着Android系统的升级可能有发送需要在任务 中进行,如有问题请百度 thread 或者看下面链接的文章 https://www.cnblogs.com/y ...

  5. python 经典博客链接

    1, 从文件的读取与输出: http://www.cnblogs.com/xuxn/archive/2011/07/27/read-a-file-with-python.html http://www ...

  6. Vue-Vue组件的注册和使用

    全局注册: 要注册一个全局组件,可以使用 Vue.component(tagName, options). 注意确保在初始化根实例之前注册组件: html代码: <div id="ex ...

  7. ASP.NET RAZOR自动生成的js Timer

    <input type="hidden" value="@(Model.TimeLength)" id="examTimeLength" ...

  8. LINQ 如何动态创建 Where 子查询

    还是那句话,十年河东,十年河西,莫欺少年穷! 学无止境,精益求精... 今天探讨下如何构造动态的LINQ子查询 LINQ,相信大家都写过,很简单,下面以一个基本的范例说明下: namespace Co ...

  9. [Spark][Python]DataFrame中取出有限个记录的例子

    [Spark][Python]DataFrame中取出有限个记录的例子: sqlContext = HiveContext(sc) peopleDF = sqlContext.read.json(&q ...

  10. ubuntu12.04安装mininet

    网上安装mininet教程有很多,都是通过git命令安装,但有一个坑,安装到./install.sh时会报错,记录下来 1.通过git 下载mininet git clone git://github ...