【PAT甲级】1018 Public Bike Management (30 分)(SPFA,DFS)
题意:
输入四个正整数C,N,S,M(c<=100,n<=500),分别表示每个自行车站的最大容量,车站个数,此次行动的终点站以及接下来的M行输入即通路。接下来输入一行N个正整数表示每个自行车站初始拥有的自行车数量,接下来输入M行每行包含三个正整数分别表示一条双向边的端点以及这条路的长度。求去往终点车站一次所经历的最短路,多条最短路则优先少带出车辆,次优先少带回车辆。(路上经过站点时需要把该站点的车辆变为最大容量的一半)
AAAAAccepted code:
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int c,n,s,m;
int a[];//每个站初始自行车数量
vector<pair<int,int> >adj[];//邻接表
int d[];//最短路距离
bool inq[];//是否在队列中的标记
vector<int>pre[];//前驱结点数组
vector<int>path,temp_path;
int sent=inf,take=inf;
void SPFA(){
queue<int>q;
for(int i=;i<=n;++i)
d[i]=inf;
q.push();
inq[]=true;
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=false;
for(int i=;i<adj[u].size();++i){
int v=adj[u][i].first;
int val=adj[u][i].second;
if(!v)
continue;
if(d[u]+val<d[v]){
d[v]=d[u]+val;
pre[v].clear();
pre[v].push_back(u);
if(!inq[v]){
q.push(v);
inq[v]=true;
}
}
else if(d[u]+val==d[v])
pre[v].push_back(u);
}
}
}
void DFS(int x){
if(!x){
int remain=,temp_sent=;
temp_path.push_back(x);
for(int i=temp_path.size()-;i>=;--i){
int u=temp_path[i];
remain+=a[u]-c/;
if(remain<){
temp_sent-=remain;
remain=;
}
}
if(temp_sent<sent){
path=temp_path;
sent=temp_sent;
take=remain;
}
else if(temp_sent==sent&&remain<take){
path=temp_path;
take=remain;
}
temp_path.pop_back();
}
temp_path.push_back(x);
for(int i=;i<pre[x].size();++i)
DFS(pre[x][i]);
temp_path.pop_back();
}
int main(){
cin>>c>>n>>s>>m;
for(int i=;i<=n;++i)
cin>>a[i];
int u,v,val;
for(int i=;i<=m;++i){
cin>>u>>v>>val;
adj[u].push_back({v,val});
adj[v].push_back({u,val});
}
SPFA();
DFS(s);
cout<<sent<<" ";
for(int i=path.size()-;i>=;--i){
if(i<path.size()-)
cout<<"->";
cout<<path[i];
}
cout<<" "<<take;
return ;
}
【PAT甲级】1018 Public Bike Management (30 分)(SPFA,DFS)的更多相关文章
- PAT 甲级 1018 Public Bike Management (30 分)(dijstra+dfs,dfs记录路径,做了两天)
1018 Public Bike Management (30 分) There is a public bike service in Hangzhou City which provides ...
- PAT Advanced 1018 Public Bike Management (30) [Dijkstra算法 + DFS]
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...
- PAT甲级1018. Public Bike Management
PAT甲级1018. Public Bike Management 题意: 杭州市有公共自行车服务,为世界各地的游客提供了极大的便利.人们可以在任何一个车站租一辆自行车,并将其送回城市的任何其他车站. ...
- 1018 Public Bike Management (30 分)
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- 1018 Public Bike Management (30分) 思路分析 + 满分代码
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...
- 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs
前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...
- PAT A 1018. Public Bike Management (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...
- 1018 Public Bike Management (30分) (迪杰斯特拉+dfs)
思路就是dijkstra找出最短路,dfs比较每一个最短路. dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关, ...
- 1018 Public Bike Management (30) Dijkstra算法 + DFS
题目及题解 https://blog.csdn.net/CV_Jason/article/details/81385228 迪杰斯特拉重新认识 两个核心的存储结构: int dis[n]: //记录每 ...
随机推荐
- Aggregate 聚合用法
var listb= ListA.Where(x => x.Id.Equals(obj.Id)).Select(x => x.SubData).Aggregate((x, y) => ...
- mybatis - buildSqlSessionFactory()
buildSqlSessionFactory() 这个方法比较长, 干的事情也比较多. 包括一些别名, 插件, 类型处理器等的解析. 从主流程上来看, 最主要的其实是干了两件事:1. 对 mapper ...
- Gitee 码云 pages 搭建vue项目记录
首先要在.gitignore文件去掉/dist,这个文件默认是不上传的,但是执行打包bulid的时候会生成dist文件,而线上访问的是打包之后的dist文件: vue.config.js文件,如下图箭 ...
- 201771010135 杨蓉庆《面对对象程序设计(java)》第十二周学习总结
1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的API: (3) 了解Java GUI中2D图形中字体与颜色的 ...
- leetcode 387
Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...
- PTA点赞狂魔
点赞狂魔 (25 分) 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持.每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性.然而有这么一种人,他们会通过给自己看 ...
- codeforces Beautiful Numbers
来源:http://codeforces.com/problemset/problem/1265/B B. Beautiful Numbers You are given a permutat ...
- Plastic Sprayers Manufacturer - Ingenious Design Of Spray Plastic Bottle
Plastic bottles are now an indispensable container in life. Plastic bottles will appear in all aspec ...
- Protobuf协议--java实现
Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式.不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态. pr ...
- (2)Linux Java环境变量安装
install default JRE/JDK Installing Java with apt-get is easy. First, update the package index: sudo ...