L2-001. 紧急救援(PAT)~最短路应用
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:
输入第一行给出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
这题是一题最短路变形(写了这么多最短路还是不会写) 我多半是个废人吧。
通过这题学会了如何记录路径,和最短路的条数 ( 感觉自己是个智障)
这题其实就是找到最短路。
找出有多少最短路。
然后在最短里面找到一个拥有最大救援队的路,记录这条路径。
以前只会找最短路后面的两个要求都不会。
way[maxn] 这个数组用来记录那条最优解的路径
fa[maxn] 还要通过这个数组进行结合才能找到路径
fa[i] 表示 i 前面的节点
sumteam[maxn] 这个是对应节点的最大救援队的数目
本题还有一个坑点 输出首尾不能有多余空格
对应格式卡的特别死
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=;
int n,m,s,d;
int tu[maxn][maxn],dis[maxn],vis[maxn],way[maxn];
int team[maxn],sumteam[maxn],sumway[maxn],fa[maxn];
void dijkstra(int s)
{
memset(dis,0x3f,sizeof(dis));
dis[s]=;
vis[s]=;
sumway[s]=;
sumteam[s]=team[s];
for (int i= ;i<n ;i++){
if (tu[s][i]!=inf && i!=s ){
dis[i]=dis[s]+tu[s][i];
fa[i]=s;
sumteam[i]=team[i]+sumteam[s];
sumway[i]=;
}
}
for (int i= ;i<n- ;i++){
int mind=inf,mint=,p=s;
for (int j= ;j<n ;j++ ){
if (!vis[j] && dis[j]<mind) {
mind=dis[j];
p=j;
}
}
vis[p]=;
for (int j= ;j<n ;j++){
if (!vis[j]) {
if (dis[j]>dis[p]+tu[p][j]) {
dis[j]=dis[p]+tu[p][j];
sumway[j]=sumway[p];
sumteam[j]=sumteam[p]+team[j];
fa[j]=p;
}else if (dis[j]==dis[p]+tu[p][j]) {
sumway[j]+=sumway[p];
if (sumteam[j]<sumteam[p]+team[j]){
sumteam[j]=sumteam[p]+team[j];
fa[j]=p;
}
}
}
}
}
}
int main() {
scanf("%d%d%d%d",&n,&m,&s,&d);
for (int i= ; i<n ; i++)
scanf("%d",&team[i]);
memset(tu,inf,sizeof(tu));
int a,b,c;
for (int i= ; i<m ; i++) {
scanf("%d%d%d",&a,&b,&c);
tu[a][b]=min(tu[a][b],c);
tu[b][a]=tu[a][b];
}
dijkstra(s);
int num=,son=d;
while(son!=s) {
way[num++]=son;
son=fa[son];
}
way[num++]=s;
printf("%d %d\n",sumway[d],sumteam[d]);
for (int i=num- ; i> ; i--)
printf("%d ",way[i]);
printf("%d\n",way[]);
return ;
}
L2-001. 紧急救援(PAT)~最短路应用的更多相关文章
- L2-001. 紧急救援(最短路的变形)*
L2-001. 紧急救援 #include <cstdio> #include <algorithm> using namespace std; ; int const INF ...
- 天梯赛 L2-001 紧急救援 (最短路 dij)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- Day 001:PAT练习--1091 N-自守数 (15 分)
体验了一阵子现代生活后,朕发现敲代码还是挺有意思的.所以从今天开始,小编秦始皇开始记录朕做PAT题目的过程辣,那话不多说,开始今天的题目了: 题目描述: 如果某个数 K 的平方乘以 N 以后, ...
- 天梯杯 PAT L2-001. 紧急救援 最短路变形
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- PAT L2-001 紧急救援 —— (多参数最短路)
和天梯中的直捣黄龙差不多.但是,通过这个问题,我对多参数最短路又有了更深一层的了解. 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝.剪枝方法是, ...
- PAT-GPLT训练集 L2-001 紧急救援(最短路)
PAT-GPLT训练集 L2-001 紧急救援 题目大意:求最短路的条数,最短路中的权重和的最大值和这条最短路的路线 分析:使用dijkstra算法求出最短路,并且对dijkstra算法进行变化,设起 ...
- PAT - L2-001. 紧急救援( Dijstra )
- PAT - L2-001. 紧急救援 题目链接 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两 ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- pat 团体天梯赛 L2-001. 紧急救援
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
随机推荐
- DML触发器1
数据库触发器是特殊的存储程序.通常不直接调用它们,而是由数据库的事件触发. 触发器分类: >DML触发器 >instead-of触发器 >系统事件触发器,还可以是DDL 一. DML ...
- Linux查看磁盘剩余空间
Linux查看磁盘剩余空间 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df 文件系统 1K-blocks 已用 可用 已用% 挂载点 /dev/sda8 ...
- MySQL查询所有数据库表出错
1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:show tables 错误代码: 1046 No database sel ...
- Qt5.6.0+OpenGL 纹理贴图首战告捷
重要的话写在前面~~通过今晚的实验,知道了EBO是不能随便release的~~~一直不要release就可以了,否则vao会失效 Display.h #ifndef DISPLAYWIDGET_H # ...
- C#图解教程 第二十四章 反射和特性
反射和特性 元数据和反射Type 类获取Type对象什么是特性应用特性预定义的保留的特性 Obsolete(废弃)特性Conditional特性调用者信息特性DebuggerStepThrough 特 ...
- css3动画实现旋转木马
写旋转木马的时候,突发奇想想加个遮罩效果,那当然是用box-reflect属性了,然鹅,却被overflow:hidden坑了....... 写的效果就是不出来,太任性了有木有,代码无误呀,也没报错, ...
- 神级程序员:让你的爬虫就像人类的用户行为! 你敢封我IP吗?
1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望 ...
- [BZOJ2503][HAOI2006]均分数据
BZOJ Luogu sol 如果已经确定了一个序列,现要求把这个序列分成m个连续段作为答案,那么就可以用一个显而易见的DP DP显然可以得到当前序列下的最优解. 所以模拟退火瞎JB改一改序列每次DP ...
- [BZOJ1005] [HNOI2008] 明明的烦恼 (prufer编码)
Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N ...
- textarea高度随内容自适应
最近遇到一个需求,视频名称初始有个生成值,并且支持可以手动修改,修改后名称过长后换行高度随内容增加.刚开始想到用input但是发现input不支持换行.后来用了textarea,用js来控制,下面是实 ...