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

1018 Public Bike Management

比较复杂的模拟题,Dijstra和dfs结合,注意记牢回溯算法框架:

#include<bits/stdc++.h>
using namespace std;
#define ipair pair<int,int>
int cmax,n,sp,m;
vector<vector<int>> pre;
vector<vector<ipair>> graph;
vector<int> num,dis,temp,res;
int minNeed=INT_MAX,minBack=INT_MAX;
// 每条最短路径模拟前向再反向
void dfs(int last){temp.push_back(last);if(last==0){int need=0,back=0;for(int i=temp.size()-1;i>=0;i--){int tid=temp[i];if(num[tid]>=0){back+=num[tid];}else{ //够不够补再分情况讨论if(back>=(-num[tid])){ //够补back+=num[tid];}else{    //不够补,能分多少分多少need+=(-num[tid]-back);back=0;}}}// 根据题目这句话:Finally after another space, output the number of bikes that we must take back to PBMC after the condition of Sp is adjusted to perfect.if(minNeed>need){minNeed=need;minBack=back;res=temp;}else if(minNeed==need&&minBack>back){minBack=back;res=temp;}}for(int i=0;i<pre[last].size();i++){dfs(pre[last][i]);}temp.pop_back();
}int main(){scanf("%d%d%d%d",&cmax,&n,&sp,&m);graph.resize(n+1);num.resize(n+1,0);pre.resize(n+1);dis.resize(n+1,INT_MAX);dis[0]=0;for(int i=1;i<=n;i++){scanf("%d",&num[i]);num[i]-=(cmax/2);}for(int i=0;i<m;i++){int s,d,w;scanf("%d%d%d",&s,&d,&w);graph[s].push_back(make_pair(d,w));graph[d].push_back(make_pair(s,w));}priority_queue<ipair, vector<ipair>, greater<ipair>> pq;pq.push(make_pair(0,0)); //weight, pointwhile(!pq.empty()){int u=pq.top().second;pq.pop();if(u==sp) break;for(auto& it:graph[u]){int v=it.first;int weight=it.second;if(dis[u]+weight<dis[v]){dis[v]=dis[u]+weight;pre[v].clear();pre[v].push_back(u);pq.push(make_pair(dis[v],v));}else if(dis[u]+weight==dis[v]){pre[v].push_back(u);}}}dfs(sp);printf("%d ",minNeed);for(int i=res.size()-1;i>=0;i--){printf(i==0?"%d":"%d->",res[i]);}printf(" %d",minBack);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【九芯电子】智能声控台灯语音模块,低成本语音识别芯片
  • 企业级OV SSL证书获取步骤
  • OpenCV 基本使用
  • 思科CCNP最新考证流程
  • 2024医疗器械网络交易服务第三方平台备案申请流程
  • 零基础学会机器学习,到底要多久?
  • Collection和List集合
  • C++中有哪几种构造函数?
  • 基于迅为RK3588开发板的AI图像识别方案
  • 如何让RStudio使用不同版本的R
  • 【python中级】串口发送ASCII字符以及十六进制字符
  • 算法【二分答案法】
  • 解锁多场景,EasyCVR视频汇聚网关赋能业务数字化转型
  • 系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
  • Linux 初级面试题目-45题 总结
  • CSS3 变换
  • Elasticsearch 参考指南(升级前重新索引)
  • gitlab-ci配置详解(一)
  • Git同步原始仓库到Fork仓库中
  • isset在php5.6-和php7.0+的一些差异
  • js对象的深浅拷贝
  • mysql 5.6 原生Online DDL解析
  • PHP CLI应用的调试原理
  • PHP的Ev教程三(Periodic watcher)
  • 阿里云购买磁盘后挂载
  • 从伪并行的 Python 多线程说起
  • 分布式事物理论与实践
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 从如何停掉 Promise 链说起
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #13 yum、编译安装与sed命令的使用
  • #Linux(权限管理)
  • #WEB前端(HTML属性)
  • (2)STL算法之元素计数
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (52)只出现一次的数字III
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Activiti-modeler中文支持
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)终结任务
  • (已解决)什么是vue导航守卫
  • (转)【Hibernate总结系列】使用举例
  • (转载)Linux 多线程条件变量同步
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net mvc总结
  • .NET Remoting学习笔记(三)信道
  • .Net 高效开发之不可错过的实用工具
  • .NET多线程执行函数