7-15 城市间紧急救援 (10 分)

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

输入格式:

输入第一行给出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

结尾无空行

#include<iostream>
#include<cstring>
using namespace std;
const int N=510,inf=0x3f3f3f3f;
int pre[N],cnt[N],jyd[N],jyd_num[N],vis[N],road[N];
int g[N][N];
int n,m,s,d,t,k1;
void dijstar(){cnt[s]=1;vis[s]=1;for(int i=0;i<n;i++){int f=-1,min=inf;for(int j=0;j<n;j++){if(!vis[j]&&g[s][j]<min){min=g[s][j];f=j;}}if(f==-1)break;else vis[f]=1;for(int j=0;j<n;j++){if(!vis[j]&&g[s][j]>g[s][f]+g[f][j]){g[s][j]=g[s][f]+g[f][j];jyd_num[j]=jyd_num[f]+jyd[j];pre[j]=f;cnt[j]=cnt[f];}else if(!vis[j]&&g[s][j]==g[s][f]+g[f][j]){cnt[j]=cnt[j]+cnt[f];if(jyd_num[j]<jyd_num[f]+jyd[j]){jyd_num[j]=jyd[j]+jyd_num[f];pre[j]=f;}}}}
}
int main(){cin>>n>>m>>s>>d;memset(g,inf,sizeof(g));for(int i=0;i<n;i++){cin>>jyd[i];jyd_num[i]=jyd[i];cnt[i]=1;}for(int i=0;i<m;i++){int x,y,w;cin>>x>>y>>w;g[x][y]=g[y][x]=w;}dijstar();cout<<cnt[d]<<' '<<jyd[s]+jyd_num[d]<<endl;t=pre[d];while(t!=s){road[k1++]=t;t=pre[t];}cout<<s;for(int i=k1-1;i>=0;i--)cout<<' '<<road[i];cout<<' '<<d;return 0;
}

7-15 城市间紧急救援 (10 分)相关推荐

  1. 5-35 城市间紧急救援 (25分) pat 数据结构

    题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有 ...

  2. PTA7-12 城市间紧急救援 (25 分)(dijkstra+dp)(简单易懂的写法)

    PTA7-12 城市间紧急救援 (25 分) 关于这个题呢,我当时也想了很久没有一点头绪.所以,菜鸡的我一如既往的打开了CSDN(手动滑稽).我看了很多大佬的写法,最普遍的应该就是dijkstra+d ...

  3. 7-11 城市间紧急救援 (25 分)

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

  4. 5-35 城市间紧急救援 (25分)

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

  5. L2-001 城市间紧急救援 (25分)(迪杰斯特拉算法)

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

  6. 城市间紧急救援 (25 分)

    //迪杰斯特拉算法求城市间紧急救援 #include<iostream> #include<cstring> using namespace std; #define num ...

  7. 城市间紧急救援 (25 分)【dijkstra模板 超时原因】

    立志用最少的代码做最高效的表达 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度 ...

  8. 7-35 城市间紧急救援 (25 分)(思路加详解)

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

  9. 7-2 城市间紧急救援 (25 分)

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

最新文章

  1. angularJS(5)
  2. 【ORACLE 高可用】 ORACLE STREAM 基于单表的流复制 配置 案例
  3. Android封装快捷键,android打包一个没有快捷键的apk,并且通过另一个应用启动
  4. java注解 源码_详解Java注解教程及自定义注解
  5. 将数据库表导入到solr索引
  6. kafka中生产者和消费者的分区问题
  7. 从零开始学Pytorch(七)之卷积神经网络
  8. 利用console控制台调试php代码
  9. 技巧心得:DOS学习心得(一)
  10. 2005年度最佳网名
  11. android程序填空题,10道android填空题及答案
  12. BigDecimal实现加减乘除
  13. python与SQL学习比较
  14. Security and Communication Networks 论文投稿
  15. 个人网站接入live2d详细教程
  16. 赛事快讯|2022中国工程机器人大赛——飞思无人机仿真与自主任务赛项演示视频来啦!
  17. 2018.8.4T3(大容斥)
  18. 使用python构建数据库_使用Python构建一个极简主义博客(或者,如何学习停止烦恼和热爱Web开发)。
  19. Python实现区域生长算法(regionGrow)
  20. 9行代码实现图片上传和预览(自定义按钮上传)

热门文章

  1. ipv4广播地址怎么填_什么是IP地址?IP地址有什么用?网络工程师来告诉你
  2. android 底部黑边,android – 截屏周围的黑色边缘
  3. Dubbo管理端安装
  4. JS Date格式化为yyyy-MM-dd类字符串
  5. Apache的详细配置
  6. 验证码颜色、字母、数字、线条、圆点、位置都随机,点击切换验证码
  7. 在FLEX中获得当前PLAYER版本等信息.
  8. 技术管理中的“沟通”
  9. Flutter PageView 使用详细概述
  10. flutter向上动画弹出菜单效果