城市间紧急救援 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条边,每个城市 ...
随机推荐
- win10中批量新建文件夹
1.新建一个bat文件,如[批量新建.bat].或者新建txt文件,输入完内容后重命名为bat文件 2.建议用notepad软件打开文件,首先确定编码格式为ANSI编码 (否则最后出现的效果是乱码,不 ...
- CrystalDecisions.Windows.Forms文件
1.CrystalDecisions.Windows.Forms 相关dll文件 CrystalDecisions.Crystalreports.Engine.dllCrystalDecisions. ...
- linux异常 - 弹出界面 eth0:设备eth0似乎不存在
问题描述: 用VMware vSphere Client复制虚拟机之后,出现这个问题 解决方法: service network stop service NetworkManager restart
- 集成unittest做接口测试
unittest接口测试 上篇已经讲了接口测试的做法,利用的是postman工具,工具始终是工具,它有一定的局限性,比如测试数据的存放,断言的方法以及上下接口关联使用灵活性.python对http接口 ...
- MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口
MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https:// ...
- android 获取颜色 getColor 方法 deprecated 过期
可以使用下面代码代替: ContextCompat.getColor(getContext(), R.color.post_list_content_color) 需要引入: compile 'com ...
- OWIN时遇到的问题
1.在需要授权时如何获得需要授权的应用clientId? 除了从Request.QueryString("client_id")中获得还有别的方法吗?例如通过OWIN中间件的某个属 ...
- python之路之反射
这个是上两个的加强版
- HTML的创建
创建一个HTML 直到产生scr文件之前的创建和原来建Java项目一样. 把scr文件Delete. 创建HTML File 4. 设置浏览器(我用的是搜狗浏览器,所以先找到搜狗的exe文件位置,导入 ...
- List数组排序
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...