城市间紧急救援 Dijkstra

输出格式:
第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从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的更多相关文章
- PTA-数据结构 Dijkstra 城市间紧急救援
城市间紧急救援(25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- 城市间紧急救援(25 分)(dijstra变形)
城市间紧急救援(25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标 ...
- 5-5 城市间紧急救援 (25分)【最短路spfa】
5-5 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...
- L2-001. 紧急救援---(Dijkstra,记录路径)
https://www.patest.cn/contests/gplt/L2-001 L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...
- L2-001. 紧急救援 (Dijkstra算法打印路径)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- pta—紧急救援 (dijkstra)
题目连接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题面: 作为一个城市的应急救援队伍 ...
- 计算城市间的球面距离(C++实现)
#include<iostream> #include<string> #include<cmath> #include<iomanip> using ...
- pta l2-1紧急救援(Dijkstra)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题意:给n个城市,m条边,每个城市 ...
随机推荐
- AcWing 532. 货币系统
#include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...
- laravel框架实现发送邮件的功能
1.在config 下的mail.php中配置(配置后面的两个就行了) 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', '7623018 ...
- Request原理
- AcWing 842. 排列数字
深搜的一道水题 https://www.acwing.com/problem/content/844/ 正确输入输出 #include<bits/stdc++.h> using nam ...
- PHP Apache/Nginx/IIS等各环境下的伪静态配置
一.Apache的伪静态配置 1.网站根目录下需要有 .htaccess 文件,没有则自己创建一个,内容如下: <IfModule mod_rewrite.c> RewriteEngine ...
- 微服务监控平台获取网关(zuul)配置列表
步骤: (1)读取zuul的配置文件,获取路由配置项信息: private static Properties props; static { String fileName = "appl ...
- ansible笔记(2):管理清单配置详解
前情提要:管理清单(Iventory)配置文件/etc/ansible/hosts.通过修改该配置文件以达到管理受控主机的目的. 在我的实验平台上有3台主机:192.168.232.181(an ...
- 【转载】JDBC操作LOB字段
转自:http://www.cnblogs.com/tengtao93/p/4984689.html 1.LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一 ...
- FFmpeg—— Bitstream Filters 作用
原文链接: https://stackoverflow.com/questions/32028437/what-are-bitstream-filters-in-ffmpeg Let me expla ...
- 【Thinkphp】记录一次分页的实现
thinkphp分页非常简单 1,控制器渲染数据: $studentList = StudentDb::paginate(5); $this->view->assign('list',$s ...