输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从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. vs2010安装

    1.网盘上2010安装包可用,先下载到电脑上,然后找到setup文件,安装即可 2.下载插件,基本的文本对齐,tab键补齐等功能 3.测试hello world程序 4.出现的问题 一个文件夹下有多个 ...

  2. [HNOI2013] 游走 - 概率期望,高斯消元,贪心

    假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...

  3. (转)GC ROOTS

    还是英文的技术博客更给力,更清楚,本人懒,没有翻译. In your specific example, in any managed environment, Person is not a GC ...

  4. Java基本语法--关键字&标识符

    本篇博客主要介绍了Java基本语法中的关键字.保留字和标识符. 关键字与保留字 关键字(keyword的定义及特点) ✄ 定义:被Java 语言赋予了特殊含义,用做专门用途的字符串 ✄ 特点:关键字中 ...

  5. Python JASON

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. http://www.runoob.com/python/python-json.ht ...

  6. maven报错Non-resolvable parent POM---pom找不到parent

    没有配置relativePath属性,说明运行的时候使用的是默认的,所以它会在默认的pom父类中查找,而不会到我自己创建的里面进行寻找 参考链接:https://blog.csdn.net/qq_37 ...

  7. 【sql】sql必知必会_01

    数据: /* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Sourc ...

  8. AcWing 893. 集合-Nim游戏

    //只能拿某些特定个数的石子 #include <cstring> #include <iostream> #include <algorithm> #includ ...

  9. 关于python 的 __future__

    经常看到__future__: from __future__ import absolute_importfrom __future__ import print_functionfrom __fu ...

  10. Linux上查看当前系统各内存分区信息

    命令 ulimit -a -a 查看所有信息,同理,也可以例如 ulimit -s 只查看栈占内存信息