蓝桥杯 交通信号 2022研究生组

问题:
在这里插入图片描述

Dijstra算法变形题,有向边分正行和逆行方向,注意逆行的绿灯时间是正行的红灯时间
这题的关键是理清从当前节点出发,到下一个节点是哪一时刻,理清这一点后,再跑Dijstra算法求最短路。
假设curr_t时刻到达u节点,到达邻居v的时刻为nei_t
无论是正行还是逆行,红绿灯的周期T = g + y + r + y,因此curr_t时刻红绿灯的状态等价于p=curr_t%T 时刻的状态
根据p(即红绿灯的状态)分类讨论:

1.走正行道,绿黄红黄顺序等红绿灯, g y r y :

①:p < g, 到达邻居的时间nei_t = curr_t + y,即当前时间加上到达邻居节点的时间y(也是黄灯时间)
②:p >= g, 到达邻居的时间nei_t = curr_t + (g + r + y + y - p) + y,(g + r + y + y - p)为等待绿灯的时间

2.走逆行道,红黄绿黄顺序等红绿灯, r y g y:

①:p < r + y,到达邻居的时间nei_t = curr_t + (r + y - p) + y,(r + y - p)是等绿灯的时间
②:p>=r+y && p < r + y + g, 到达邻居的时间nei_t = curr_t + y,无需等待绿灯
③:p>=r+y+g:到达邻居的时间nei_t = curr_t + (r + y + g + y - p + r + y) + y,
情况③比较特殊,需要等待当前周期结束(即r + y + g + y - p),再等下一个周期的红灯和黄灯(r + y)

#include <iostream>
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
const int MAX = 100010;
struct Edge {// dir为true表示正行int to, ne, g, r, y;bool dir;Edge() {}Edge(int to, int ne, int g, int r, int y, bool dir) : to(to), ne(ne), g(g), r(r), y(y), dir(dir) {}
} e[3000000];struct Node {int n;ll t;Node(int n, ll t) : n(n), t(t) {}bool operator < (const Node &n1) const {return t > n1.t;}
};int cnt = 1;
int h[MAX] = {0};
void add(int u, int v, int g, int r, int y, bool dir) {e[cnt].ne = h[u];e[cnt].to = v;e[cnt].g = g;e[cnt].r = r;e[cnt].y = y;e[cnt].dir = dir;h[u] = cnt++;
}int f[MAX];
int find(int x) {return x == f[x] ? f[x] : (f[x] = find(f[x]));
}int main()
{// 请在此输入您的代码int n, m, src, tar;int u, v, g, r, d;cin >> n >> m >> src >> tar;ll t[MAX] = {0};for(int i = 0; i < MAX; i++) {f[i] = i;t[i] = 0x1fffffffffffffff;}for(int i = 0; i < m; i++) {scanf("%d %d %d %d %d", &u, &v, &g, &r, &d);add(u, v, g, r, d, true);// 逆行的绿灯时间是正行的红灯时间add(v, u, r, g, d, false);int fx = find(u);int fy = find(v);if(fx != fy) f[fx] = fy;}if(find(src) != find(tar)) {cout << -1;return 0;}priority_queue<Node, vector<Node>> pq;t[src] = 0;pq.push({src, 0});while(!pq.empty()) {int curr = pq.top().n;ll curr_t = pq.top().t;pq.pop();if(curr == tar) {cout << curr_t;return 0;}for(int edge = h[curr]; edge; edge = e[edge].ne) {bool dir = e[edge].dir;int to = e[edge].to;ll g = e[edge].g;ll r = e[edge].r;ll y = e[edge].y;ll nei_t;ll p = curr_t % (g + r + y + y);if(dir) {// 走正行道,绿黄红黄顺序等红绿灯, g  y  r  ynei_t = p < g ? (curr_t + y) : (curr_t + g + r + y + y - p + y);} else {// 走逆行道,红黄绿黄顺序等红绿灯      r  y  g  yif(p < r + y)          nei_t = curr_t + r + y - p + y;else if(p < r + y + g) nei_t = curr_t + y;else                   nei_t = curr_t + r + y + g + y - p + r + y + y;}if(nei_t < t[to]) {t[to] = nei_t;pq.push({to, nei_t});}}}return 0;
}

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

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

相关文章

美团一面,面试官让介绍AQS原理并手写一个同步器,直接凉了

写在开头 今天在牛客上看到了一个帖子&#xff0c;一个网友吐槽美团一面上来就让手撕同步器&#xff0c;没整出来&#xff0c;结果面试直接凉凉。 就此联想到一周前写的一篇关于AQS知识点解析的博文&#xff0c;当时也曾埋下伏笔说后面会根据AQS的原理实现一个自定义的同步器…

C++笔记(函数重载)

目录 引入&#xff1a; 定义&#xff1a; 易错案例&#xff1a; 引入&#xff1a; 对于实现相似功能的函数&#xff0c;在命名时&#xff0c;我们常会出现命名重复的问题。对于C语言&#xff0c;编译器遇到这种命名重复的情况&#xff0c;会进行报错。而我们的C为了更方便程…

前端开发中地图定位与距离计算的应用实践

前端开发中地图定位与距离计算的应用实践 在前端开发中&#xff0c;地图功能的应用日益广泛&#xff0c;无论是用户位置的定位、目标距离的计算&#xff0c;还是地址的解析与展示&#xff0c;地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及…

Docker部署前后端分离项目

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftWindow.cs using UnityEngine.UI; using TMPro; using UnityEngin…

CentOS7.9创建本地yum源操作步骤报错解决方法

1.基础信息 CentOS7.9-mini最小化安装的系统&#xff0c;在离线安装rpm时候需要大量依赖&#xff0c;需要花费大量时间去查找依赖包。受于环境限制无法接入互联网使用公开yum源&#xff0c;于是便有了搭建本机yum源的想法&#xff0c;在网上下载CentOS7.9标准版“CentOS-7-x86_…

windows 系统下 mysql 数据库的下载与安装(包括升级安装)

windows 系统下 mysql 数据库的下载与安装&#xff08;包括升级安装&#xff09; 一、mysql 介绍&#xff1a; MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。 MySQL 是最流行的关系型数据库管理系统之一&#xf…

pyqt5 QScrollArea组件

本示例中&#xff0c;演示了QScrollArea的使用&#xff0c;以及QScrollBar的样式设定&#xff0c;在代码中使用setStyleSheet设置样式&#xff0c;记得要优先设置scrollArea&#xff0c;再设置窗口的样式&#xff0c;不然QScrollBar的样式会不起作用&#xff0c;使用QSS设置没有…

hadoop103: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

分析&#xff1a; 在启动hadoop服务的时候&#xff0c;遇到了这个问题&#xff1a; hadoop103: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 这个一看就是&#xff0c;密钥问题 于是ssh 主机名就行测试 需要输入密码&#xff0c;就说明这里有问…

A Note on LoRA

A Note on LoRA 摘要Additional InsightsPractical ImprovementsLooking Ahead 摘要 LoRA已成为一种首选的方法&#xff0c;用以高效地适应大型语言模型&#xff08;LLM&#xff09;&#xff0c;其简便性和有效性令人瞩目。本文档扩展了原始LoRA论文&#xff0c;提供了最初未讨…

MySQL进阶之(七)EXPLAIN 详解

七、EXPLAIN 详解 7.1 查询性能那些事7.1.1 查看系统性能参数7.1.2 统计 SQL 的查询成本7.1.3 定位执行慢的 SQL&#xff1a;慢查询日志01、开启慢查询日志参数02、关闭慢查询日志03、删除慢查询日志 7.1.4 查看 SQL 执行成本&#xff1a;SHOW PROFILE 7.2 EXPLAIN 语句输出中各…

java程序 .exe启动nginx防止重复启动,已解决

java代码生成好的.exe启动nginx服务程序 根据nginx占用端口来解决nginx服务重复启动问题&#xff08;下面代码了解代码逻辑后根据自己的业务需求修改即可&#xff09; 代码&#xff1a; package org.example;import javax.swing.*; import java.awt.*; import java.io.*; …

蓝桥杯——16

学习视频&#xff1a;17-深搜的剪枝策略视频讲解_哔哩哔哩_bilibili #include<iostream> #include<cstring> using namespace std; int n, m; string maze[110]; bool vis[110][110]; int dir[4][2] { {0,1},{0,-1},{1,0},{-1,0} }; int ans 100000; bool in(in…

利用Python ARM网关仓储物流AGV小车控制器

在现代智慧物流体系中&#xff0c;高效的信息管理系统是物流中心实现精准跟踪货物、科学管理库存及优化配送路线的关键环节。通过采用ARM架构的工控机或网关&#xff0c;并结合Python的二次开发能力&#xff0c;可以有效集成并强化物流管理系统的数据处理与通信功能&#xff0c…

基于springboot+vue实现的的成人教育教务系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

2024年河北省职业院校技能大赛高职组“信息安全管理与评估”赛项样题

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;受赋能的客户院校均…

jvm中jdk常用的几个命令总结

1.jmap 此命令可以用来查询内存信息&#xff0c;实例个数及占用内存大小 1.1 查看堆内存概要信息&#xff08;内存分配统计&#xff09; jmap -histo[:live] <pid> .-histo&#xff1a;显示堆中对象的统计信息&#xff0c;包括每个类的实例数量、占用内存大小等 :live…

Redis高级-分布式缓存RDB原理

分布式缓存 1.1.2.RDB原理 bgsave开始时会fork主进程得到子进程&#xff0c;子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术&#xff1a; 当主进程执行读操作时&#xff0c;访问共享内存&#xff1b;当主进程执行写操…

MT3022 召唤神龙

思路&#xff1a;二分答案 。check():检查组p套卡是否成立&#xff0c;即检查r卡是否足够组成p套卡。 &#xff08;易错点&#xff1a;check的思路&#xff0c;开long long&#xff09; #include <bits/stdc.h> using namespace std; long long int n, m; long long int…

ht1622不显示无反应问题解决

如果你正在写ht1622 驱动时&#xff0c;怎么看程序都没问题&#xff0c;抓取波形&#xff0c;示波器分析波形&#xff0c;如果都没有问题&#xff0c;那么很大可能是硬件问题&#xff0c;检测看看 ht1622 RD是不是接地了。 RD 低会进入读取模式&#xff0c;所以不用RD 请将RD悬…