当前位置: 首页 > news >正文

【PAT甲级题解记录】1018 Public Bike Management (30 分)

【PAT甲级题解记录】1018 Public Bike Management (30 分)

前言

Problem:1018 Public Bike Management (30 分)

Tags:dijkstra最短路径 DFS

Difficulty:剧情模式 想流点汗 想流点血 死而无憾

Address:1018 Public Bike Management (30 分)

问题描述

简单来说就是求单源最短路径,但是每个点都有一定数量的自行车,并且给定一个标准车数,我们要从起点到终点一边走一边调整每个点的车数至标准车数。也就是说我们出发时需要拿一定数量的车,在路上遇到多的可以补充进来,少的就要用出去,最终满足使所有车数都标准。

现在要求最短路径下,出发时拿的车数最小的情况,当拿出最小情况一样,就要求拿回车数最小的情况(车多出来了就要拿回去)。这里很坑,他有三个条件,前两个条件相同情况下还会看第三个,感觉姥姥这题出的太折磨了。(菜是原罪)

也就是说这是一个顺序性的问题,一开始我想着既然可以拿回去,那后面多出来的车可以补给前面,但是写完程序后一交居然发现不行。。。

解题思路

一开始没注意到还有一个拿回数量最小的问题,简单的写了个dijkstra附带最小化点权和,然后就寄了。

但既然dijkstra能把最短路径全都求出来,那我们就可以很快速的从终点利用dfs回溯回去,到起点后再模拟下答案就可以了。

但要是我一开始没看错题的话我就直接dfs了或许更简单毕竟数据不大。

参考代码

/** @Author: Retr0.Wu * @Date: 2022-02-17 16:27:20 * @Last Modified by: Retr0.Wu* @Last Modified time: 2022-02-17 20:02:12*/
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > edge[520]; // 边
vector<int> nums(520, 0);         // 点
vector<bool> visit(520, false);   // 访问集合
vector<int> dis(520, 0x3f3f3f3f); // 实时最短路径
vector<int> pres[520];            // 前点下标
int C_max, N, S_p, M;             // 最大存量1e2 站点数量5e2 问题站点下标 边的数量
vector<int> tracks;
int min_send = 0x3f3f3f3f, min_back = 0x3f3f3f3f;
void dfs(int x, vector<int> v)
{vector<int> v0 = v;v0.push_back(x);if (x == 0) // 到达起点了{int sends = 0, backs = 0;for (int i = v0.size() - 2; i >= 0; i--) // 从原点到终点{int need = C_max / 2 - nums[v0[i]];if (need < 0)  // 有的多{backs += -need; // 拟带回去,先拿上}else  // 不够{if (backs > need) // 手上拿的还够,从手上拿的扣走{backs -= need;}else  {sends += need - backs;  // 手上拿的不够,还需从总部多拿点backs = 0;  // 手上拿着的扣完}}}if (sends < min_send) // 是当下从总部拿最少的方案{tracks = v0;min_send = sends;min_back = backs; // 别忘了back也要一起更新}else if (sends == min_send && backs < min_back) // 从总部拿的数量和之前的方案一样,就要对比拿回去的是不是更少了{tracks = v0;min_back = backs;}return;}for (int i = 0; i < pres[x].size(); i++){dfs(pres[x][i], v0);}
}
void dijkstra()
{dis[0] = 0;pres[0].push_back(-1);for (int iii = 0; iii <= N; iii++){int minn = 0x3f3f3f3f;int mini = 0;for (int i = 0; i <= N; i++){if (!visit[i] && dis[i] < minn){minn = dis[i];mini = i;}}visit[mini] = true;for (int i = 0; i < edge[mini].size(); i++){int nexti = edge[mini][i].first;if (dis[mini] + edge[mini][i].second < dis[nexti]){dis[nexti] = dis[mini] + edge[mini][i].second;pres[nexti].clear();pres[nexti].push_back(mini);}else if (dis[mini] + edge[mini][i].second == dis[nexti]){pres[nexti].push_back(mini);}}}
}
int main()
{cin >> C_max >> N >> S_p >> M; // 最大存量1e2 站点数量5e2 问题站点下标 边的数量for (int i = 1; i <= N; i++){cin >> nums[i];}for (int i = 0; i < M; i++){int v1, v2, w;cin >> v1 >> v2 >> w;edge[v1].push_back(make_pair(v2, w));edge[v2].push_back(make_pair(v1, w));}dijkstra();dfs(S_p, tracks);cout << min_send << " " << tracks[tracks.size() - 1];for (int i = tracks.size() - 2; i >= 0; i--)cout << "->" << tracks[i];cout << " " << min_back << endl;return 0;
}

总结

还是那句话,高分题,题目意思理解透再写,写代码别听太吵的歌,好在这道题难度还好。

相关文章:

【PAT甲级题解记录】1018 Public Bike Management (30 分)

【PAT甲级题解记录】1018 Public Bike Management (30 分) 前言 Problem&#xff1a;1018 Public Bike Management (30 分) Tags&#xff1a;dijkstra最短路径 DFS Difficulty&#xff1a;剧情模式 想流点汗 想流点血 死而无憾 Address&#xff1a;1018 Public Bike Managemen…...

SpringCloud————Eureka概述及单机注册中心搭建

Spring Cloud Eureka是Netflix开发的注册发现组件&#xff0c;本身是一个基于REST的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server&#xff1a;服务器端。提供服务的注册和发现…...

原生django raw() 分页

def change_obj_to_dict(self,temp):dict {}dict["wxh_name"] temp.wxh_namedict["types"] temp.typesdict["subject"] temp.subjectdict["ids"] temp.ids# 虽然产品表里没有替代型号&#xff0c;但是通过sql语句的raw()查询可以…...

Android 9.0 Settings 搜索功能屏蔽某个app

1.概述 在9.0的系统rom产品定制化开发过程中,在系统Settings的开发功能中,最近产品需求要求去掉搜索中屏蔽某个app的搜索,就是根据包名,不让搜索出某个app., 在系统setting中,搜索功能中,根据包名过滤掉某个app的搜索功能,所以需要熟悉系统Settings中的搜索的相关功能,…...

SQL性能优化的47个小技巧,果断收藏!

1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器&#xff1b; 服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存储在缓存中的数据&#xff1b; 未命中缓存后&#xff0c;MySQL通…...

SE | 哇哦!让人不断感叹真香的数据格式!~

1写在前面 最近在用的包经常涉及到SummarizedExperiment格式的文件&#xff0c;不知道大家有没有遇到过。&#x1f912; 一开始觉得这种格式真麻烦&#xff0c;后面搞懂了之后发现真是香啊&#xff0c;爱不释手&#xff01;~&#x1f61c; 2什么是SummarizedExperiment 这种cla…...

运行Qt后出现无法显示字库问题的解决方案

问题描述&#xff1a;运行后字体出现问题QFontDatabase: Cannot find font directory解决前提&#xff1a; 其实就是移植后字体库中是空的&#xff0c;字没办法进行显示本质就是我们只需要通过某种手段将QT界面中的字母所调用的库进行填充即可此处需要注意的是&#xff0c;必须…...

数据库浅谈之共识算法

数据库浅谈之共识算法 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知识 &#x1…...

代码随想录算法训练营 || 贪心算法 455 376 53

Day27贪心算法基础贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。刷题或者面试的时候&#xff0c;手动模拟一下感觉可以局部最优推出整体最优&#xff0c;而且想不到反例&#xff0c;那么就试一试贪心。做题的时候&#xff0c;只要想清楚 局部最优 是什么&…...

PMP考前冲刺2.25 | 2023新征程,一举拿证

题目1-2&#xff1a;1.项目经理正在进行挣值分析&#xff0c;计算出了当前的成本偏差和进度偏差。发起人想要知道基于当前的绩效水平&#xff0c;完成所有工作所需的成本。项目经理应该提供以下哪一项数据?A.完工预算(BAC)B.完工估算(EAC)C.完工尚需估算(ETC)D.完工偏差(VAC)2…...

【自然语言处理】Topic Coherence You Need to Know(主题连贯度详解)

Topic Coherence You Need to Know皮皮&#xff0c;京哥皮皮&#xff0c;京哥皮皮&#xff0c;京哥CommunicationUniversityofChinaCommunication\ University\ of\ ChinaCommunication University of China 在大多数关于主题建模的文章中&#xff0c;常用主题连贯度&#xff…...

C++入门:模板

模板是泛型编程的基础&#xff0c;泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器&#xff0c;比如迭代器和算法&#xff0c;都是泛型编程的例子&#xff0c;它们都使用了模板的概念。每个容器都有一个单一的定义&#xff0c;…...

【MySQL】索引常见面试题

文章目录索引常见面试题什么是索引索引的分类什么时候需要 / 不需要创建索引&#xff1f;有什么优化索引的方法&#xff1f;从数据页的角度看B 树InnoDB是如何存储数据的&#xff1f;B 树是如何进行查询的&#xff1f;为什么MySQL采用B 树作为索引&#xff1f;怎样的索引的数…...

【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf

【Web逆向】万方数据平台正文的逆向分析&#xff08;上篇--加密发送请求&#xff09;—— 逆向protobuf声明一、了解protobuf协议&#xff1a;二、前期准备&#xff1a;二、目标网站&#xff1a;三、开始分析&#xff1a;我们一句句分析&#xff1a;先for循环部分&#xff1a;后…...

Amazon S3 服务15岁生日快乐!

2021年3月14日&#xff0c;作为第一个发布的服务&#xff0c;Amazon S3 服务15周岁啦&#xff01;在中国文化里&#xff0c;15岁是个临界点&#xff0c;是从“舞勺之年”到“舞象之年”的过渡。相信对于 Amazon S3 和其他的云服务15周岁也将是其迎接更加美好未来的全新起点。亚…...

【python】函数详解

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录基本函数-function模块的引用模块搜索路径不定长参数参数传递传递元组传递字典缺陷&#xff0c;容易改了原始数据&#xff0c;可以用copy()方法避免变量作用域全局变量闭包closurenonlocal 用了这个声明闭包…...

AoP-@Aspect注解处理源码解析

对主类使用EnableAspectJAutoProxy注解后会导入组件&#xff0c; Import(AspectJAutoProxyRegistrar.class) public interface EnableAspectJAutoProxy {AspectJAutoProxyRegistrar类实现了ImportBeanDefinitionRegistrar接口中的registerBeanDefinitions()方法&#xff0c;此…...

宝塔搭建实战php悟空CRM前后端分离源码-vue前端篇(二)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享了悟空CRM server端在宝塔部署的方式&#xff0c;但是由于前端是用vue开发的&#xff0c;如果要额外开发新的功能&#xff0c;就需要在本地运行、修改、打包重新发布到宝塔才能实现功能更新&…...

FastASR+FFmpeg(音视频开发+语音识别)

想要更好的做一件事情&#xff0c;不仅仅需要知道如何使用&#xff0c;还应该知道一些基础的概念。 一、音视频处理基本梳理 1.多媒体文件的理解 1.1 结构分析 多媒体文件本质上可以理解为一个容器 容器里有很多流 每种流是由不同编码器编码的 在众多包中包含着多个帧(帧在音视…...

二分查找的实现代码JAVA

二分查找一、思路二、实现代码&#xff08;普通版&#xff09;三、整数溢出问题四、改进代码一、思路 1.前提: 有已排序数组A (假设已经做好) 2.定义左边界L、 右边界R,确定搜索范围&#xff0c;循环执行二分查找(3、4两步) 3.获取中间索引 M Floor((LR) 1/2) 4.中间素索引的值…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...