题意:

输入四个正整数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)的更多相关文章

  1. 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 ...

  2. 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 ...

  3. PAT甲级1018. Public Bike Management

    PAT甲级1018. Public Bike Management 题意: 杭州市有公共自行车服务,为世界各地的游客提供了极大的便利.人们可以在任何一个车站租一辆自行车,并将其送回城市的任何其他车站. ...

  4. 1018 Public Bike Management (30 分)

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  5. 1018 Public Bike Management (30分) 思路分析 + 满分代码

    题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...

  6. 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs

    前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...

  7. PAT A 1018. Public Bike Management (30)【最短路径】

    https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...

  8. 1018 Public Bike Management (30分) (迪杰斯特拉+dfs)

    思路就是dijkstra找出最短路,dfs比较每一个最短路. dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关, ...

  9. 1018 Public Bike Management (30) Dijkstra算法 + DFS

    题目及题解 https://blog.csdn.net/CV_Jason/article/details/81385228 迪杰斯特拉重新认识 两个核心的存储结构: int dis[n]: //记录每 ...

随机推荐

  1. 搭建vue工程遇到的问题汇总

    1.vue搭建环境- vue init webpack my-project无响应(如下报错) 原因:node 版本过高.v8.1.0 解决拌饭: 降级,终端指令 n v8.0.0; mac用户: s ...

  2. blg_统考,打印准考证 网页代码!

    <html xmlns="http://www.w3.org/1999/xhtml"><head> <title>打印准考证</title ...

  3. 一份比较详细的DOS命令说明

    一份比较详细的DOS命令说明 1 echo 和 @ 回显命令 @                     #关闭单行回显 echo off              #从下一行开始关闭回显 @echo ...

  4. 原生js按回车键实现登录

    这篇文章主要介绍了原生JS按回车键实现登录的方法,众所周知,这是在web程序设计中的一个非常实用的小技巧,主要用于表单提交,包括注册.登录等等功能,具有很好的用户体验,有着非常广泛的实用价值,需要的朋 ...

  5. win server 挂载

    新建服务器角色,选择[NFS服务器]. mount -o nolock \\x.x.x.x.x.x\! z:/*链接到*/

  6. angular9 学习笔记

    前言: AngularJS作为Angular的最早版本,2010年发布其初始版本,至今已经10年了.除了这个最初版本(没学过),项目上一直从2.x 到至今项目使用8.x版本,现在Angular在201 ...

  7. Fluent_Python_Part3函数即对象,07-closure-decoration,闭包与装饰器

    第7章 函数装饰器和闭包 装饰器用于在源码中"标记"函数,动态地增强函数的行为. 了解装饰器前提是理解闭包. 闭包除了在装饰器中有用以外,还是回调式编程和函数式编程风格的基础. 1 ...

  8. iOS中的主要框架framework

    在日常的iOS项目开发中,主要使用的就是Foundation和UIKit这两个框架. (一)Foundation框架 Foundation是对Core Foundation框架的一个封装,使用Foun ...

  9. 浏览器 User-Agent 整理

    也可以去这里查询:http://tools.jb51.net/table/useragent window.navigator.userAgent 1) Chrome Win7: Mozilla/5. ...

  10. 【代码学习】PYTHON 异常处理

    一.什么是异常 在程序执行过程中可能会影响程序的正常执行,一般情况下,在python无法正常处理程序时就会发生一个异常 当python脚本发生异常时我们需要捕获处理他,否则程序会终止执行 二.异常处理 ...