【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]: //记录每 ...
随机推荐
- Hadoop3.1.1源码Client详解 : 写入准备-RPC调用与流的建立
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 关于RPC(Remote Procedure Call),如果没有概念,可以参考一下RMI(Remot ...
- JS高级---工厂模式创建对象和自定义构造函数创建对象的区别
创建对象:工厂模式和自定义构造函数的区别 共同点: 都是函数, 都可以创建对象, 都可以传入参数 区别: 工厂模式: 函数名是小写 有new, 有返回值 new之后的对象是当前的对象 直接调用 ...
- Python--比较两个字典部分value是否相等(可以用于接口自动化)
eg:例如你调用了一个新增的接口,以往功能测试的话,你再web端新增一个店铺之后,你肯定要去数据库中查看,这些数据插入的对不对,是否正确的插入了每个字段 # 比较两个字典部分是否相等 def comp ...
- 吴裕雄 python 神经网络——TensorFlow 图、张量及会话
import tensorflow as tf g1 = tf.Graph() with g1.as_default(): v = tf.get_variable("v", [1] ...
- 【Struts 动态表单】DynaActionForm
RegisterAction package k.action; import org.apache.struts.action.ActionForm; import org.apache.strut ...
- C# FormData 文件太大报错404 Form表单上传大文件,无法进入后台Action,页面提示404.
web.config中添加如下节点 <system.webServer> <security> <requestFiltering > &l ...
- js中的跨域
因为javascript的同源策略,导致它普通情况下不能跨域,直到现在,我还是不能完全理解js跨域的几种方法,没办法,只能慢慢学习,慢慢积累,这不,几天又在园里看到一篇博文,有所收获,贴上来看看; 原 ...
- 创业学习---《如何预判创业可行性》--B-1.预判模块---HHR计划---以太一堂
<如何预判创业可行性>----对创业进行占卜 一,<开始学习> 1,预热思考题: (1)预判一个模式的可行性.你有一个朋友要创业,给你讲了他的创业计划,你帮他判断一下是否靠谱. ...
- 连接数据库的url
mysql: jdbc:mysql://localhost:3306:test这句里面分如下解析:jdbc:mysql:// 是指JDBC连接方式:localhost: 是指你的本机地址:3306 S ...
- DOCKER SNAT与DNAT
映射容器端口到宿主主机的实现 默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器. 容器访问外部实现 容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址.这 ...