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

输入格式:

输入第一行给出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)~最短路应用的更多相关文章

  1. L2-001. 紧急救援(最短路的变形)*

    L2-001. 紧急救援 #include <cstdio> #include <algorithm> using namespace std; ; int const INF ...

  2. 天梯赛 L2-001 紧急救援 (最短路 dij)

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

  3. Day 001:PAT练习--1091 N-自守数 (15 分)

      体验了一阵子现代生活后,朕发现敲代码还是挺有意思的.所以从今天开始,小编秦始皇开始记录朕做PAT题目的过程辣,那话不多说,开始今天的题目了: 题目描述:   如果某个数 K 的平方乘以 N 以后, ...

  4. 天梯杯 PAT L2-001. 紧急救援 最短路变形

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

  5. PAT L2-001 紧急救援 —— (多参数最短路)

    和天梯中的直捣黄龙差不多.但是,通过这个问题,我对多参数最短路又有了更深一层的了解. 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝.剪枝方法是, ...

  6. PAT-GPLT训练集 L2-001 紧急救援(最短路)

    PAT-GPLT训练集 L2-001 紧急救援 题目大意:求最短路的条数,最短路中的权重和的最大值和这条最短路的路线 分析:使用dijkstra算法求出最短路,并且对dijkstra算法进行变化,设起 ...

  7. PAT - L2-001. 紧急救援( Dijstra )

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

  8. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

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

  9. pat 团体天梯赛 L2-001. 紧急救援

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

随机推荐

  1. JBoss启动项目报错

    具体报错如下: WARNING: -logmodule is deprecated. Please use the system property 'java.util.logging.manager ...

  2. freemarker报错之十四

    1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...

  3. freemarker字符串拼接

    freemarker字符串拼接 1.字符串拼接的几种类型 (1)字符串和字符串 (2)字符串和数字 (3)字符串和字符串变量 (4)字符串变量和字符串变量 2.演示示例 <#--定义字符串--& ...

  4. (二十三)mongodb中group的问题

    今天的工作中我需要从mongodb数据库中查出一定的数据,并排序后返回给前台,数据库表中包含了ruleID,processingID,userID,updateTime等字段.    同一个ruleI ...

  5. ClassLoader原理

    ClassLoader原理 JVM规范定义了两种类型的类装载器:启动内装载器 (bootstrap) 和用户自定义装载器 (user-defined class loader) . 一.    Cla ...

  6. ORA-00900: invalid SQL statement

    1.错误描述 SQL> startup;        startup        ORA-00900: invalid SQL statement 2.错误原因 3.解决办法

  7. 芝麻HTTP:PhantomJS的安装

    PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...

  8. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

  9. C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...

  10. Linux进行AES加密每次结果都不一致并且解密失败报错

    1. 现象 windows操作系统下进行"123456"的AES加密 encrypted message is below : QLNYZyjRnKF/zxAjzDt/lw== d ...