天梯L2-001. 紧急救援(25分)
L2-001. 紧急救援
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:
输入第一行给出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 <string>
#include <cstring>
#include <algorithm>
using namespace std;
int INF = ;
int e[][];
int d[];
int a[];
int v[];
int r[];
int su[];
int ans[];
int path[];
int sum=;
int m;
int n = ;
void dijkstra(int s)
{
int i,j;
for(i = ; i <=n ; i++)
{
path[i]=s;
d[i] = e[s][i];
if(s != i && e[s][i] != INF) //如果可以走
{
su[i] = r[i] + r[s];
ans[i] = ;//初始化路数为1
}
}
d[s]=;
v[s]=;
while()
{
int k=-;
int min = INF;
for (j = ; j <= n; j++)
{
if (v[j] == && d[j] < min)
{
min = d[j];
k = j;
}
}
if(k==-) break;
v[k] = ;//标记已被挑过
for (j = ; j <= n; j++)
{
if (!v[j]&&d[j] > d[k] + e[k][j])//利用k点对各个点松弛
{
ans[j]=ans[k];//路数更新
d[j] = d[k] + e[k][j];
su[j]=su[k]+r[j];//人数更新
path[j]=k;//保存路径
}
else if(!v[j]&&d[j]==d[k]+e[k][j])
{
ans[j]+=ans[k];//路数更新
if(su[j]<su[k]+r[j])
{
su[j]=su[k]+r[j];//人数更新
path[j]=k;//保存路径
} }
}
} }
int main()
{
int i, j,s,d;
cin>>n>>m>>s>>d;
s++;//我是从1开始计数
d++;
memset(v, , sizeof(v));
memset(ans, , sizeof(ans));
memset(path, , sizeof(path));
memset(su, , sizeof(su));
for (i = ; i <=n; i++)
{
for (j =; j <=n; j++)
{
if (i == j) e[i][j] = ;
else e[i][j] = INF;
}
}
for(int i=;i<=n;i++) cin>>r[i];
for (i = ; i <= m; i++)
{
int x,y,k;
cin >> x >> y >> k;
x++;
y++;
if (e[x][y] > k)//两城市之间可能有多班公交
{
e[x][y] = k;
e[y][x] = k;
}
}
if(n == ) //特判,其实不考虑也能过
{
printf("1 %d\n1", r[]);
return ;
}
dijkstra(s);
int p[],temp=d;
int k=;
while(temp!=s) //输出路径
{
p[k++]=temp;
temp=path[temp];
}
p[k]=s;
cout<<ans[d]<<" "<<su[d]<<endl;
for(i=k;i>=;i--)
{
cout<<p[i]-<<" ";
}
cout<<d-<<endl; return ;
}
天梯L2-001. 紧急救援(25分)的更多相关文章
- 5-5 城市间紧急救援 (25分)【最短路spfa】
5-5 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- L2-001 紧急救援 (25 分)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- 城市间紧急救援(25 分)(dijstra变形)
城市间紧急救援(25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标 ...
- 天梯 L2 紧急救援 (dijkstra变形+记录路径)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- 天梯赛 L2-001 紧急救援
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- L1-049 天梯赛座位分配 (20 分)
L1-049 天梯赛座位分配 (20 分)(Java解法) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所 ...
随机推荐
- spring boot 使用thymeleaf3.0以及thymeleaf的热部署
spring boot 截止1.5.4,默认使用thymeleaf2.0,会有一些很蛋疼的地方比如xml格式之类的,具体哪些就不说了 -> 替换为3.0版本 pom中加入 <propert ...
- 扩展KMP(转)
拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i ...
- javaScript中的DOM补充
一.DOM树 二.DOM节点 DOM 是这样规定的: 整个文档是一个文档节点 每个 HTML 标签是一个元素节点 包含在 HTML 元素中的文本是文本节点 每一个 HTM ...
- 初始化dataframe
由字典生成dataframe: >>> d = {'col1': [1, 2], 'col2': [3, 4]} >>> df = pd.DataFrame(dat ...
- keystone uwsgi failed
~$ /usr/local/bin/uwsgi /etc/keystone/keystone-uwsgi-public.ini[uWSGI] getting INI configuration fro ...
- scheduler configuration options
Table 4.53. Description of scheduler configuration options Configuration option = Default value Desc ...
- DB处理大量数据处理日志报错问题
因为当插入.更新或删除大批量数据的时候,有时候会出现事务日志满的问题,所以解决步骤 1.连接到当前数据库 db2 connect to uppdb 2.查看数据库配置文件 db2 get db cf ...
- DB2数据库管理常用操作
查询db2数据库相关配置(日志,字符集) db2 get db cfg for uppdb 查询db2数据库db2codepage db2set 在进行数据库导入导出的时候,可能要修改db2codep ...
- jQuery Fancybox插件使用参数详解
Fancybox的特点如下: 可以支持图片.html文本.flash动画.iframe以及ajax的支持 可以自定义播放器的CSS样式 可以以组的形式进行播放 如果将鼠标滚动插件(mouse whee ...
- 字符串(string+StringBuilder) +正则表达式元字符
创建字符串: System.String(string是这个类的别名) System.Text.StringBuilder System.String类: 1,创建字符串 string s = &qu ...