输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从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 maxn = ;
int n,m,s,d;
int cnt[maxn],vis[maxn],num[maxn],snum[maxn],pre[maxn];
//最短路径条数 是否经过 救援队数量 到达该城市救援队数量 前一个城市
int a[maxn][maxn]; void Dijkstra(){
vis[s] = ;cnt[s] = ;pre[s] = -;
for(int i = ; i < n; i++){
int min = 0x3f,f = -;
for(int j = ; j < n; j++){
if(!vis[j] && a[s][j] < min){
min = a[s][j];
f = j;
}
}
if(f == -) break;
vis[f] = ;
for(int j = ; j < n; j++){
if(!vis[j] && a[s][j] > a[s][f] + a[f][j]){
a[s][j] = a[s][f] + a[f][j];
pre[j] = f;
cnt[j] = cnt[f];
snum[j] = num[j] + snum[f];
}
else if(!vis[j] && a[s][j] == a[s][f] + a[f][j]){
cnt[j] += cnt[f];
if(snum[j] < snum[f] + num[j]){
pre[j] = f;
snum[j] = snum[f] + num[j];
}
}
}
}
}
int ans[maxn],tp;
void path(int x){
ans[tp++] = x;
while(pre[x] != -){
ans[tp++] = pre[x];
x = pre[x];
}
}
int main() {
//freopen("in","r",stdin);
ios::sync_with_stdio();
cin >> n >> m >> s >> d;
for(int i = ; i < n; i++){
cin >> num[i];
snum[i] = num[i];
cnt[i] = ;
}
memset(a,0x3f, sizeof(a));
for(int i = ; i < n; i++) a[i][i] = ;
while(m--){
int x,y,z;
cin >> x >> y >> z;
a[x][y] = z;a[y][x] = z;
}
Dijkstra();
path(d);
cout << cnt[d] << " " << snum[d] + num[s] << endl;
for(int i = tp - ; i >= ; i--)
if(i) cout << ans[i] << " ";
else cout << ans[i];
return ;
}

城市间紧急救援 Dijkstra的更多相关文章

  1. PTA-数据结构 Dijkstra 城市间紧急救援

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

  2. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  3. 城市间紧急救援(25 分)(dijstra变形)

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

  4. 5-5 城市间紧急救援 (25分)【最短路spfa】

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

  5. L2-001. 紧急救援---(Dijkstra,记录路径)

    https://www.patest.cn/contests/gplt/L2-001 L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...

  6. L2-001. 紧急救援 (Dijkstra算法打印路径)

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

  7. pta—紧急救援 (dijkstra)

    题目连接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题面: 作为一个城市的应急救援队伍 ...

  8. 计算城市间的球面距离(C++实现)

    #include<iostream> #include<string> #include<cmath> #include<iomanip> using ...

  9. pta l2-1紧急救援(Dijkstra)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题意:给n个城市,m条边,每个城市 ...

随机推荐

  1. Java上转型和下转型

    Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting) .向下转型(downcasti ...

  2. ansible笔记(13):变量(二)

    1.谈一谈[Gathering Facts]:使用setup模块查看 当我们运行一个playbook时,默认都会运行一个名为“[Gathering Facts]”的任务,前文中已经大致的介绍过这个默认 ...

  3. python3练习100题——021

    题目很容易,只要理清了数学思想就可以解出来,所以本来不是很喜欢这种题. 后来看到有大神用递归解,觉得还是很值得学习的. 原题链接:http://www.runoob.com/python/python ...

  4. \r、\n、\r\n的区别-转载

    文章地址: https://blog.csdn.net/qq_40395278/article/details/81199281 https://blog.csdn.net/qq592304796/a ...

  5. 第二篇,前端高性能JavaScript优化

    加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上下文加载执行完一个继续加载执行下一个文件会阻塞页面资源的加载,所以一般情况下JavaScript文件放在body标签 ...

  6. Anaconda多环境Python

    1. Create a new environment for 32bit Python 2.7: set CONDA_FORCE_32BIT=1 conda create -n py27_32 py ...

  7. testng如何实现并发

    参考: https://www.cnblogs.com/znicy/p/6534893.html

  8. mongo shell远程连接使用数据库

    mongo mydb --username user1 --host --password --username 用户名 --host 连接ip --port 连接端口号 --password 密码 ...

  9. HTML入门归纳--JavaScript

    本人一直在从事.net的开发,界面都是采用的WPF,近期花了一个多月进行HTML前端的学习,在这里呢进行学习总结和归纳. 本系列将主要分为4个模块: 控件 样式 布局 JavaScript 根据多年W ...

  10. AcWing STL初步学习

    vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() beg ...