题意:

输入四个正整数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. 用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)

    (软件环境) 『系统』Windows 10 x64 『JAVA』JDK 1.8.0_91 『Eclipse』 Eclipse-oxygen 『Maven』 apache-maven-3.6.3 『Je ...

  2. word写文档体会

    1.找一个文档规范要求. 2.根据文档的规范要求调整正文的格式,标题1的格式,标题2的格式,标题3的格式,图表的格式,把没用的那些格式都删除掉. 3.图注表注后空格一行. 4.设置页眉页脚. 5.生成 ...

  3. celery task - 2

    # celery task 前言 讨论一个定时任务,一般而言,需要的功能如下: 封装成对象,独立执行: 对象有一些接口,便于了解它的状态: 定时调用: 行为控制,包括重试,成功/失败回调等: 下面分别 ...

  4. tkinter学习(4)frame、pack、canvas学习

    1.frame和pack学习 1.1 代码: import tkinter as tk window = tk.Tk() window.title('my window') window.geomet ...

  5. JAVA常量池、栈、堆的比较(转载)

    今天在学JAVA的数据存储位置的时候,看到了一篇博文感觉不错,特此转载: http://www.cnblogs.com/Eason-S/p/5658230.html JAVA中,有六个不同的地方可以存 ...

  6. dom4j+反射实现bean与xml的相互转换

    由于目前在工作中一直用的dom4j+反射实现bean与xml的相互转换,记录一下,如果有不正确的地方欢迎大家指正~~~ 一.反射机制 在此工具类中使用到了反射技术,所以提前也看了一些知识点,例如:ht ...

  7. 使用pycharm创建Django项目,'django-admin' 不是内部或外部命令

    报错信息如下: (笔者的电脑为win10,python3.7,django 2.2.6 ) 第一种情况的解决方案:没有配置环境变量,Django安装之后,需要配置环境变量,命令django-admin ...

  8. C语言:使用递归解决汉诺塔问题。

    //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...

  9. windows server 2016系统安装

  10. 域名和URL各部分组成

    什么是域名? 域名,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传 输时标识计算机的电子方位. IP地址是Internet主机的作为路由寻址用的数字型标识,人 ...