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 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
随机推荐
- 挖一挖不常用到而又很实用的重载-Trim
这个我想没有那个开发人员说不知道,但是里面有一个重载,这个不知道有多少开发人员知道! 可以看到,我可以去掉字符串前后的指定字符,只要我在char[]中指定即可,而不是仅仅去掉空格,这次为什么要提它,是 ...
- Java中的表达式运算
1.问题背景 以下代码运行的结果为: A.a的值:8 b的值:7 B.a的值:8 b的值:8 C.a的值:9 b的值:7 D.a的值 ...
- Flex和Java通信报错
1.错误描述 11-30 18:15:52 ERROR [localhost-startStop-1] org.springframework.web.servlet.FrameworkServlet ...
- Duplicate entry '0' for key 'PRIMARY'的一种可能的解决办法
在MySQL设计好数据库往往数据库中插入数据的时候, 因为主键ID默认是不赋值的,只给其他项目赋值了,相关的SQL代码是这样的 StringBuilder strSql = new StringBui ...
- FFMPEG 在ubuntu下的安装与使用
转载自 http://www.cnblogs.com/dwdxdy/p/3240167.html (部分一:安装) ffmpeg的安装: 1.下载源文件(以ffmpeg1.2.1为例): http:/ ...
- EF6CodeFirst+MVC5+Autofac泛型注册 入门实例
贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...
- cisco linksys ea3500 刷机 openwrt
家中router改造成千兆华为A1,淘汰下来的cisco linksys ea3500 终于可以去刷机 openwrt,尽情折腾啦! 分享步骤: 准备文件 https://archive.openw ...
- ASP.NET 使用Session,避免用户F5刷新时重复提交(转)
1.使用Session,避免用户重复提交(F5刷新时) 0.起因 当用户上传文件后F5刷新浏览器会导致文件的重复提交和相关程序的重复执行. 1.实现原理 由于刷新提 ...
- 关于spring的aop拦截的问题 protected方法代理问题
看到一篇很好的Spring aop 拦截方法的问题, 原文地址. 问题 貌似不能拦截私有方法? 试了很多次,都失败了,是不是不行啊? 我想了一下,因为aop底层是代理, jdk是代理接口,私有方法必 ...
- (luogu4180) [Beijing2010组队]次小生成树Tree
严格次小生成树 首先看看如果不严格我们怎么办. 非严格次小生成树怎么做 由此,我们发现一个结论,求非严格次小生成树,只需要先用kruskal算法求得最小生成树,然后暴力枚举非树边,替换路径最大边即可. ...