蓝桥杯第十三届蓝桥杯大赛软件赛决赛CC++ 研究生组之交通信号

蓝桥杯第十三届蓝桥杯大赛软件赛决赛C/C++ 研究生组之交通信号

题目链接[0交通信号 - 蓝桥云课 (lanqiao.cn)]

本题的思路十分简单,先看题意,是由n个节点,m条边的有向图,红绿灯的顺序为绿黄红黄,在最开始时候为绿灯,绿灯时可以通过这条边,黄灯时不可以走,红灯时则可以反方向走。每次往哪儿走,就在于到达这个边的一瞬间,看此时亮的是什么颜色的灯。

使用小顶堆来存储花费的时间,每次花费最少的时间是在最上面,在对图初始化时候,分为正方向可以走的,以及反向走的,由于该图是个有向图,因而要进行这样的初始化。然后就可以模拟这个过程来取得最短的时间,可以参考一下代码来进行理解。

代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
struct edge{int v;int g;int r;int y;
};
struct dis{ll d;int u;bool operator < (dis d1) const{return d1.d<d;} //自定义比较函数
};
int n, m, s, t;
vector<edge> zheng[N], fan[N];
int main()
{priority_queue<dis> q;  //小顶堆cin>>n>>m>>s>>t;for(int i = 1; i <= m; i++){int u,v,g,r,d;scanf("%d%d%d%d%d", &u, &v, &g, &r, &d);zheng[u].push_back({v,g,r,d});fan[v].push_back({u, g, r, d});}q.push({0, s});vector<ll> f(n+1, LONG_MAX);//初始化时间为最长f[s]=0;//起始顶点设置为0while(q.size()){auto[times,node] = q.top();q.pop();for(auto &e:zheng[node]) //需要绿灯的时候才可以走{ll temp=f[node]%(1ll*e.g+e.y+1ll*e.r+e.y); //*1.ll是为了让其保持long long的数据范围if(temp<e.g) //此时正处于绿灯{if(f[e.v]>f[node]+e.y){f[e.v] = f[node]+e.y; //将该节点的值修改q.push({f[e.v],e.v});}}else{if(f[e.v]>f[node]+e.y+1ll*e.g+e.y+1ll*e.r+e.y-temp){f[e.v]=f[node]+e.y+1ll*e.g+e.y+1ll*e.r+e.y-temp;q.push({f[e.v],e.v});}}}for(auto &e:fan[node]) //此时属于反方向走,只有红灯的时候可以经过{ll temp=f[node]%(1ll*e.g+e.y+1ll*e.r+e.y);if(temp>=1ll*e.g+e.y&&temp<=1ll*e.g+e.y+e.r)//此时正处于红灯{if(f[e.v]>f[node]+e.y){f[e.v]=f[node]+e.y;q.push({f[e.v],e.v});}}else if(temp<1ll*e.g+e.y){if(f[e.v]>f[node]+1ll*e.y+e.g+e.y-temp){f[e.v]=f[node]+e.y+e.g+e.y-temp;q.push({f[e.v],e.v});}}else{if(f[e.v]>f[node]+1ll*e.y+e.g+e.y+e.r+e.y-temp+e.g+e.y){f[e.v]=f[node]+e.y+e.g+e.y+e.r+e.y-temp+e.g+e.y;q.push({f[e.v],e.v});}}}}if(f[t] == LONG_LONG_MAX / 2){ cout<<-1;}else {cout<<f[t];}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VOC(客户之声)赋能智能家居:打造个性化、交互式的未来生活体验

随着科技的飞速发展&#xff0c;智能家居已成为现代家庭不可或缺的一部分。然而&#xff0c;如何让智能家居更好地满足用户需求&#xff0c;提供更贴心、更智能的服务&#xff0c;一直是行业关注的焦点。在这个背景下&#xff0c;VOC&#xff08;客户之声&#xff09;作为一种用…

Redis入门到实战-第十七弹

Redis实战热身t-digest篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理…

【Java程序设计】【C00379】基于(JavaWeb)Springboot的旅游服务平台(有论文)

【C00379】基于&#xff08;JavaWeb&#xff09;Springboot的旅游服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c…

3.学习前后端关联

目录 1.接口类型 2.错误状态码 3.如何定义路由 4.那如何要求前端传入一个JSON数据呢&#xff1f; 4.解决前后端口不同源,跨域问题 1.使用CrossOrigin 2.直接复制代码使用 5.用户登录校验 1.接口类型 POST(新增数据)、PUT(更新更改数据)、GET(查询)、DELET(删除数据) …

Anaconda和Python是什么关系?

Anaconda和Python相当于是汽车和发动机的关系&#xff0c;你安装Anaconda后&#xff0c;就像买了一台车&#xff0c;无需你自己安装发动机和其他零配件&#xff0c;而Python作为发动机提供Anaconda工作所需的内核。 简单来说&#xff0c;Anaconda是一个集成了IDE、Notepad、P…

node项目中express的使用

01 expres项目的基础配置 第一步 需要先初始化项目 npm init -y第二步 安装express&#xff1a; npm i express;第三步 项目中创建app.js文件第四步 进行配置代码如下&#xff1a;var express require(express)var app express()配置路由app.get(/,(req,res)>{res.send(…

Linux初学(九)shell 脚本

一、shell 脚本编程 1.1 简介 shell脚本就是一个文件 在这个文件中包含了要批量自动执行的命令 写shell脚本的基本规范 第一步&#xff1a;用vi/vim创建一个后缀是.sh的文件 第二步&#xff1a;在文件中写入内容 第一行是&#xff1a;#!/bin/bash 指定程序的解释器从第二行开始…

网络层介绍,IP地址分类以及作用

IP地址组成&#xff1a; TTL&#xff1a;生存时间 基于ICMP报文 特殊地址&#xff1a; 0.0.0.0-0.255.255.255 1.代表未指定的地址 默认路由 DHCP下发地址的时候&#xff0c;发个报文给DHCP服务器 临时用0.0.0.0借用地址&#xff0c;未指定地址。 2.全网地址&#xff1a;目…

nginx 日志配置

access_log access_log用来记录客户端请求访问日志&#xff0c;可以出现在http&#xff0c;server&#xff0c;location&#xff0c;if块中。语法如下: access_log path [format [buffersize] [gzip[level]] [flushtime] [ifcondition]];path用来指定日志存放路径&#xff0c…

【pytorch】安装合集

使用conda或者pip安装的指令 https://pytorch.org/get-started/previous-versions/ 测试pytorch_gpu是否可用的代码 # 测试pytorch是否安装成功 import torch print(torch.__version__) print(torch.cuda.is_available())

阐述el-dropdown(下拉菜单)的基本知识

目录 1. 基本知识2. Demo3. 实战 1. 基本知识 el-dropdown是一个常用的UI组件&#xff0c;用于创建下拉菜单&#xff0c;通常用于实现各种交互式菜单、导航栏或下拉选项 确保安装Element UI库&#xff0c;它包含了el-dropdown组件 npm install element-ui # 或者 yarn add e…

配置Web运行环境与第一个网页

安装与配置Web环境: 如下使用了VSC作为web的运行环境。 下面是VSC的官网点击进入:Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 1.下载 进入官网后可以看到有windows&#xff0c;linux&#xff0c;还有苹果按照自己的系统下载&…

Node Sass does not yet support your current environment

项目运行时报错&#xff1a;Node Sass does not yet support your current environment 原因是node版本过高。 解决办法&#xff1a; 使用nvm管理node版本&#xff0c;&#xff08;如何安装nvm&#xff1f;请点击跳转&#xff09; 具体步骤如下&#xff1a; 1.查看当前node…

Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版 给选择器加上唯一key&#xff08;下面的想看就看&#xff09; 问题复现 需求是用一个下拉切换时间维度的选择&#xff0c;分别为年度、季度、月度&#xff0c;但是开发的时候发现&#xff0c;当切换的时候&#xff0c;视图可正常切换&#xff0c;但点击选择时却发现选…

软考系统架构设计师(摘抄)01

架构师承担的责任 系统架构师设计师是承担系统架构设计的核心角色&#xff0c;他不仅是连接用户需求和系统进一步设计与实现的桥梁&#xff0c;也是系统开发早期阶段质量保证的关键角色。系统架构师就是项目的总设计师&#xff0c;他是一个既需要掌控整体又需要洞悉局部瓶颈&a…

Vue 2 组件发布到 npm 的常见问题解决

按照 Vue 2 组件打包并发布到 npm 的方法配置项目后&#xff0c;项目在实际开发过程中&#xff0c;随着代码写法的多样性增加而遇到的各种打包问题&#xff0c;本文将予以逐一解决&#xff1a; 本文目录 同时导出多个组件 样式表 import 问题解决 Json 文件 import 问题解决…

图论最短路径以及floyd算法的MATLAB实现

图论是数学的一个分支&#xff0c;起源于18世纪。1736年&#xff0c;数学家欧拉通过解决“哥尼斯堡七桥问题”&#xff0c;将问题抽象成点和线的关系&#xff0c;并通过理论分析得出结论&#xff0c;这个过程标志着图论的产生&#xff0c;欧拉也因此被称为“图论之父”。图论研…

智慧城市解决方案大全:标准规范顶层设计指南、整体解决方案、厂商售前宣讲PPT、招投标、智慧城市白皮书等全套680份,一次性打包下载

关键词&#xff1a;智慧城市&#xff0c;智慧城市解决方案&#xff0c;智慧城市发展的前景与趋势&#xff0c;智慧城市概念主力流出&#xff0c;智慧城市项目包括哪些方面&#xff0c;智慧城市项目方案&#xff0c;智慧城市宣传片&#xff0c;智慧城市白皮书&#xff0c;智慧城…

MySQL之MVCC如何实现可重复读和提交读

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;Github传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有…

教程3_图像的轮廓

目录 目标 1. 特征矩 2、轮廓质心 3. 轮廓面积 4. 轮廓周长 5. 轮廓近似 6. 轮廓凸包 7. 边界矩形 7.1.直角矩形 7.2. 旋转矩形 8. 最小闭合圈 9. 拟合一个椭圆 10. 拟合直线 目标 在本文中&#xff0c;我们将学习 - 如何找到轮廓的不同特征&#xff0c;例如面积&…