L2-001 紧急救援 (25 分)

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

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);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 题目大意:
  求从S到D的最短路数量、这些最短路中能够召集的最多的救援队数量,并输出路径。 解题思路:
  dijkstra跑最短路,在求最短路的过程中更新最短路的数量、救援队的数量、该城市的前一个城市。
#include<bits/stdc++.h>
#define ll long long
#define exp 1e-8
using namespace std;
const int N = +;
const int INF = 0x3f3f3f3f;
int a[N][N],pre[N],w[N],c[N],low[N],num[N],vis[N];
int n,m,s,d,u,v,x;
void dij(){
for (int i=;i<n;i++){
low[i]=a[s][i];
num[i]=c[i]=vis[i]=;
pre[i]=i;
}
num[s]=;
pre[s]=s;
c[s]=w[s];
for (int i=;i<n;i++){
int k=-,mi=INF;
for (int j=;j<n;j++){
if (!vis[j]&&low[j]<mi){
k=j;
mi=low[j];
}
}
vis[k]=;
for (int j=;j<n;j++){
if (!vis[j]&&a[k][j]+low[k]<low[j]){
low[j]=a[k][j]+low[k];
pre[j]=k;
c[j]=c[k]+w[j];
num[j]=num[k];
}else if (!vis[j]&&a[k][j]+low[k]==low[j]){
if (c[j]<c[k]+w[j]){
c[j]=c[k]+w[j];
pre[j]=k;
}
num[j]+=num[k];
}
}
}
}
void print(int z){
if (pre[z]==s) {
printf(" %d",z);
return ;
}
print(pre[z]);
printf(" %d",z);
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&d);
memset(a,INF,sizeof(a));
for (int i=;i<n;i++) scanf("%d",&w[i]),a[i][i]=;
for (int i=;i<m;i++){
scanf("%d%d%d",&u,&v,&x);
a[u][v]=a[v][u]=min(a[u][v],x);
}
dij();
printf("%d %d\n",num[d],c[d]);
printf("%d",s);
print(d);
return ;
}


最新文章

  1. 如何自定义jupyter notebook的主题
  2. HDU1426 DFS
  3. 使用宏命令撤销EXCEL工作表保护
  4. 一个简单的金额平均分配函数(C#版)
  5. sql 多行合一行
  6. codeforces 490B.Queue 解题报告
  7. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
  8. Tengine vs openresty
  9. Textures
  10. Android用户界面 UI组件--TextView及其子类(三) EditView以及各种Span文字样式讲解
  11. MongoDB的索引
  12. python Tips(不定期更新)
  13. 例解 autoconf 和 automake 生成 Makefile 文件
  14. linux shell 之终端读写文件数据流和重定向&gt;,&lt;,&lt;&lt;,&gt;&gt;
  15. ●BZOJ 4516 [Sdoi2016]生成魔咒
  16. BI之SSIS入门最新版Visual Studio调试技巧
  17. 【资源分享】ArcFace Demo [Android]
  18. express基础项目创建
  19. linux 6.5上创建新用户后,不能登陆?
  20. 手机浏览器User-Agent信息

热门文章

  1. CentOS 7 安装 LNMP 环境(PHP7 + MySQL5.7 + Nginx1.10)
  2. Python--day24--多继承
  3. 2019-10-19-dotnet-给MatterMost订阅RSS博客
  4. Spring Boot Admin-应用健康监控后台管理
  5. WPF 元素裁剪 Clip 属性
  6. 基于ubuntu16的mqtt服务器(apache-apollo1.7.1)
  7. SAPI(PHP常见的四种运行模式)
  8. Mac-安装命令一览表
  9. background新增属性
  10. 【算法随记七】巧用SIMD指令实现急速的字节流按位反转算法。