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

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

输入格式:

输入第一行给出4个正整数NN、MM、SS、DD,其中NN(2\le
N\le 5002≤N≤500)是城市的个数,顺便假设城市的编号为0
~ (N-1)(N−1);MM是快速道路的条数;SS是出发地的城市编号;DD是目的地的城市编号。

第二行给出NN个正整数,其中第ii个数是第ii个城市的救援队的数目,数字间以空格分隔。随后的MM行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从SS到DD的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

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;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const double eps=1e-5;
const double pi=acos(-1.0);
const int mod=1e9+7;
const int INF=0x3f3f3f3f; const int N=5e2+10; int ma[N][N];
LL ways[N];
int ww[N],pre[N],ans[N],num;
PII dis[N];
bool vis[N];
int n,m,s,t; queue<int>q;
void SPFA()
{
for(int i=0;i<n;i++)
{
ways[i]=0;
vis[i]=0;
dis[i].second=0;
dis[i].first=INF;
}
pre[s]=-1;
dis[s].first=0;
dis[s].second=ww[s];
vis[s]=1;
ways[s]=1; q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=0;i<n;i++)
{
if(ma[u][i]!=INF&&i!=u)
{
if(dis[i].first>dis[u].first+ma[u][i])
{
pre[i]=u;
ways[i]=ways[u];
dis[i].first=dis[u].first+ma[u][i];
dis[i].second=dis[u].second+ww[i];
if(!vis[i])
{
q.push(i);
vis[i]=1;
}
}
else if(dis[i].first==dis[u].first+ma[u][i])
{
if(dis[i].second<dis[u].second+ww[i])
{
ways[i]+=ways[u];
pre[i]=u;
dis[i].second=dis[u].second+ww[i];
if(!vis[i])
{
q.push(i);
vis[i]=1;
}
}
}
}
}
}
// printf("%d\n",dis[t].first);
printf("%lld %d\n",ways[t],dis[t].second);
int v=t;
num=0;
while(pre[v]!=-1)
{
ans[num++]=v;
v=pre[v];
}
ans[num++]=s;
printf("%d",ans[num-1]);
for(int i=num-2;i>=0;i--)
printf(" %d",ans[i]);
} int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=0;i<n;i++)
scanf("%d",&ww[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j) ma[i][i]=0;
else ma[i][j]=ma[j][i]=INF;
}
int u,v,w;
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
ma[u][v]=min(ma[u][v],w);
ma[v][u]=ma[u][v];
}
SPFA();
return 0;
}

5-5 城市间紧急救援 (25分)【最短路spfa】的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  2. 城市间紧急救援(25 分)(dijstra变形)

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

  3. PTA-数据结构 Dijkstra 城市间紧急救援

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

  4. 天梯L2-001. 紧急救援(25分)

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  5. 城市间紧急救援 Dijkstra

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

  6. PAT-1003 Emergency (25 分) 最短路最大点权+求相同cost最短路的数量

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  7. L2-001 紧急救援 (25 分)

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

  8. PTA 旅游规划(25 分)

    7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...

  9. L2-013 红色警报 (25 分)

    L2-013 红色警报 (25 分)   战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全 ...

随机推荐

  1. Python中十六进制和字符串的转换(转载)

    调用Python内置int()函数把该字串转为数字.以下为在Python解释器编程环境下的操作示范: 把十六进制的字串转为十进制数字:Python代码>>> print int('f ...

  2. 2014年辛星解读css第五节

    本小节我们解说css中的"盒模型".即"box model",它通经常使用于在布局的时候使用,这个"盒模型"也有人成为"框模型&q ...

  3. EasyDarwin开发的短视频拍摄、录制开源项目EasyVideoRecorder

    在前面的博客<EasyDarwin开发出类似于美拍.秒拍的短视频拍摄SDK:EasyVideoRecorder>和<美拍.秒拍中安卓.IOS短视频拍摄的一些关键技术>中我们简单 ...

  4. Page (computer memory)

    A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...

  5. 手把手原生js轮播图

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  6. VVDocument+Appledoc生成文档

    在写代码的时候写上适当的注释是一种良好的习惯,方便自己或者别人阅读的方便. **VVDocument**:(Github地址:[VVDocument](https://github.com/onevc ...

  7. 对私有API提交的注意事项

    1.这个等于堵死了调试断点.关闭就不能断点调试了. 2.对于敏感的函数名要做一个对称加密处理. 防止二进制文件的静态扫描. 3.对于调用私有函数的方法,可以做一个宏定义包装. #define 你的正常 ...

  8. iOS 设备获取唯一标识符汇总

    在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”. ...

  9. mtk6589显示子系统笔记(一)

    拿到MT6589的版本不久,发现显示系统代码结构改变很大.做些备忘,后续不忙的时候可以继续看. MT6589之前的MTK的Android系统显示系统同featurePhone基本一致. 先来回顾下MT ...

  10. angularjs ng-repeat倒叙

    <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng ...