目录

  • T1. 道路
    • 思路分析
  • T2. Rainbow 的商店
    • 思路分析
  • T3. 冰阔落 I
    • 思路分析
  • T4. 青蛙的约会
    • 思路分析

T1. 道路

题目链接:SOJ D1216

N N N 个以 1 ∼ N 1 \sim N 1N 标号的城市通过单向的道路相连,每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示)。

Bob 和 Alice 过去住在城市 1 1 1,在注意到 Alice 在他们过去喜欢玩的纸牌游戏中作弊后,Bob 和她分手了,并且决定搬到城市 N N N。他希望能够尽可能快的到那,但是他囊中羞涩。我们希望能够帮助 Bob 找到从 1 1 1 N N N 最短的路径,前提是他能够付的起通行费。

时间限制:1 s
内存限制:64 MB

  • 输入
    第一行包含一个整数 K K K 0 ≤ K ≤ 10000 0 \le K\le 10000 0K10000,代表 Bob 能够在他路上花费的最大的金币数。
    第二行包含整数 N N N 2 ≤ N ≤ 100 2 \le N \le 100 2N100,指城市的数目。
    第三行包含整数 R R R 1 ≤ R ≤ 10000 1 \le R \le 10000 1R10000,指路的数目。
    接下来的 R R R 行,每行具体指定几个整数 S , D , L S, D, L S,D,L T T T 来说明关于道路的一些情况,这些整数之间通过空格间隔: S S S 是道路起始城市, 1 ≤ S ≤ N 1 \le S \le N 1SN D D D 是道路终点城市, 1 ≤ D ≤ N 1 \le D \le N 1DN L L L 是道路长度, 1 ≤ L ≤ 100 1 \le L \le 100 1L100 T T T 是通行费(以金币数量形式度量), 0 ≤ T ≤ 100 0 \le T \le100 0T100。注意不同的道路可能有相同的起点和终点。
  • 输出
    输入结果应该只包括一行,即从城市 1 1 1 到城市 N N N 所需要的最小的路径长度(花费不能超过 K K K 个金币)。如果这样的路径不存在,结果应该输出 − 1 -1 1
  • 样例输入
    5
    6
    7
    1 2 2 3
    2 4 3 3
    3 4 2 4
    1 3 4 1
    4 6 2 1
    3 5 2 0
    5 4 3 2
    
  • 样例输出
    11
    

思路分析

此题考查图论最短路径问题,是一道较好的基础应用题。

在数据量较小的情况下(大约 N ≤ 1000 N\le 1000 N1000),最短路径问题可以用 B F S \tt BFS BFS 进行求解,更快速的方式是使用堆优化的 D i j k s t r a \tt Dijkstra Dijkstra 算法。示例代码采用链式前向星存图,用堆(优先队列替代)优化的 D i j k s t r a \tt Dijkstra Dijkstra 算法求解最短路,通过运算符重载来规定优先队列中成员的优先级。

此题涉及到代价距离两个属性,应以距离为第一优先级参数,距离相同时,考虑代价为第二优先级参数。需要注意的是,优先队列默认为大根堆,可以通过重载小于号 < 实现小根堆,其中距离较长的元素的优先级高于距离较短者,代价较高的元素的优先级高于代价较低者(也可以通过给参与优先级比较的成员添加负号 - 来实现小根堆,免去运算符重载的麻烦)。

常规 D i j k s t r a \tt Dijkstra Dijkstra 算法通过定义 d i s t dist dist 数组存储从起点到每个点的最短路径长度,来限制只有更新了最短路径长度的顶点入队。此题应该限制代价不超过 k k k 的元素入队,与最短路径更新与否无关,因为距离最短的路径的总代价并不一定支付得起。也正因如此,每个顶点可能被其它代价更小的路径再次访问,不能添加标记数组对顶点进行分类。

/** Name: T1.cpp* Problem: 道路* Author: Teacher Gao.* Date&Time: 2025/05/14 22:48*/#include <bits/stdc++.h>using namespace std;// 链式前向星的数据结构
int to[10005], wl[10005], wt[10005], nxt[10005];
int head[105], tot;void add_edge(int x, int y, int w1, int w2) {++tot;to[tot] = y, wl[tot] = w1, wt[tot] = w2;	// 存储边信息nxt[tot] = head[x], head[x] = tot;			// 头插法
}int k, n, m;// 用于优先队列的数据结构
struct node {int dis, cost, id;bool operator < (const node &a) const {		// 重载小于号if (dis != a.dis) return dis > a.dis;	// 第一优先级return cost > a.cost;					// 第二优先级}
};int dijkstra(int s) {priority_queue<node> Q;Q.push({0, 0, 1});while (Q.size()) {node x = Q.top(); Q.pop();if (x.id == n) {return x.dis;}for (int i = head[x.id]; i; i = nxt[i]) {if (x.cost + wt[i] <= k) {Q.push({x.dis + wl[i], x.cost + wt[i], to[i]});}}}return -1;
}int main()
{ios::sync_with_stdio(false);cin.tie(

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

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

相关文章

【vue-4】深入理解 Vue 3 中的 v-for 指令

Vue.js 作为现代前端框架的代表之一&#xff0c;其模板指令系统提供了强大的数据绑定和渲染能力。其中&#xff0c;v-for 指令是 Vue 中最常用且最重要的指令之一&#xff0c;它允许我们基于数据源循环渲染元素或组件。在 Vue 3 中&#xff0c;v-for 保留了一贯的简洁语法&…

《R for Data Science (2e)》免费中文翻译 (第1章) --- Data visualization(1)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

界面组件DevExpress WPF中文教程:Grid - 如何完成节点排序和移动?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【Prometheus+Grafana篇】监控通过Keepalived实现的MySQL HA高可用架构

&#x1f4ab;《博主主页》&#xff1a;    &#x1f50e; CSDN主页__奈斯DB    &#x1f50e; IF Club社区主页__奈斯、 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对…

k8s:利用kubectl部署postgis:17-3.5

1.离线环境CPU:Hygon C86 7285 32-core Processor 操作系统&#xff1a;麒麟操作系统 containerd&#xff1a;1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey&#xff1a;3.1.10 Harbor:2.13.1 Postgis:17-3.52.创建并执行postgresql-headless.yaml2.1创建apiVersion: v1…

Mysql(存储过程)

目录 介绍 特点 存储过程创建 系统变量(不重要) 用户变量 局部变量 if 判断 参数&#xff08;in, out, inout) case while repeat loop 游标和条件处理程序-handler 存储函数 为了防止以后忘记&#xff0c;反复去看视频浪费时间&#xff0c;特写一篇 介绍 存储过程…

Effective Python 第14条: 用sort方法的key参数来表示复杂的排序逻辑

一、引言&#xff1a;Python排序功能的重要性 在Python开发中&#xff0c;排序功能是一个常见的需求。无论是处理数据、优化算法&#xff0c;还是提升用户体验&#xff0c;排序都是不可或缺的一部分。Python的列表内置了sort方法&#xff0c;提供了灵活的排序功能。然而&#…

react+antd 可拖拽模态框组件

DraggableModal 可拖拽模态框组件使用说明 概述 DraggableModal 是一个基于 dnd-kit/core 实现的可拖拽模态框组件&#xff0c;允许用户通过拖拽标题栏来移动模态框位置。该组件具有智能边界检测功能&#xff0c;确保模态框始终保持在可视区域内。 功能特性 ✅ 可拖拽移动&…

MySQL的基本操作及相关python代码

下面为你介绍 MySQL 的基本操作,以及对应的 Python 代码实现。我会先介绍 SQL 基本操作,再展示如何用 Python 连接 MySQL 并执行这些操作。 一、MySQL 基本操作(SQL 语句) 1. 连接数据库 bash mysql -u root -p2. 创建数据库 sql CREATE DATABASE testdb;3. 使用数据…

Armbian(斐讯N1)安装xfce桌面以及远程环境

安装xfce桌面以及vncserver(远程连接) 安装xfce桌面 apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils ubuntu的安装gdm3&#xff0c; apt install gdm3 debian安装lightdm。 apt install lightdm 安装vnc server apt-get install tightvncserver 中文字体…

【Oracle】Oracle 11g打补丁时遇到opatch apply命令无法识别

⚙️ 1. 使用完整路径执行命令 问题原因&#xff1a;若未将$ORACLE_HOME/OPatch加入系统PATH环境变量&#xff0c;直接输入opatch apply会因系统无法定位命令而报错。 解决方案&#xff1a; 改用绝对路径执行&#xff1a; $ORACLE_HOME/OPatch/opatch apply例如&#xff1a; /u…

单例模式详细讲解

一.定义单例模式是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点特点&#xff1a;1.构造函数和析构函数私有化2.禁用拷贝构造函数和赋值运算符重载&#xff08;delete&#xff09;3.利用静态成员函数和静态成员变量来给外界提供访问二…

KORGym:评估大语言模型推理能力的动态游戏平台

KORGym&#xff1a;评估大语言模型推理能力的动态游戏平台 现有评估基准多受领域限制或 pretraining 数据影响&#xff0c;难以精准测LLMs内在推理能力。KORGym平台应运而生&#xff0c;含50余款游戏&#xff0c;多维度评估&#xff0c;本文将深入解析其设计、框架、实验及发现…

ISPDiffuser文章翻译理解

ISPDiffuser: Learning RAW-to-sRGB Mappings with Texture-Aware Diffusion Models and Histogram-Guided Color Consistency翻译 Type: Conference paper Author: Yang Ren1,4, Hai Jiang1,4, Menglong Yang1,2,†, Wei Li1,2, Shuaicheng Liu3,4,† Select: ⭐️⭐️⭐️⭐…

C++线程池执行步骤分析,总结线程池流程

线程池流程总结&#xff1a;1、构造函数中创建线程&#xff0c;并添加到线程池&#xff08;构造函数返回时&#xff0c;线程自动启动&#xff0c;并停在等待wait&#xff1a;从线程池取出一个任务处&#xff09;&#xff1b; 2、主线程中添加任务&#xff0c;到任务队列。并用“…

Java 通过 HttpURLConnection发送 http 请求

问题&#xff1a; 在调试 kill 接口的时候&#xff0c;对方的服务用的是 Django RestFramework 框架提供的接口&#xff0c;用 python 请求时得到的内容如下&#xff1a; ➜ ~ python3 test.py <Response [200]> "true" // 对应的代码是 print(response, r…

【PTA数据结构 | C语言版】列出连通集

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 给定一个有 n 个顶点和 m 条边的无向图&#xff0c;请用深度优先遍历&#xff08;DFS&#xff09;和广度优先遍历&#xff08;BFS&#xff09;分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。…

GoLang教程005:switch分支

3.4 Switch分支 在 GoLand&#xff08;其实是 JetBrains 开发的 Go 编程语言 IDE&#xff09;中&#xff0c;switch 是 Go 语言&#xff08;Golang&#xff09; 的一个重要控制结构&#xff0c;用于替代多个 if-else 语句。 ✅ 特点说明特性说明自动 breakGo 的 switch 语句默认…

uniapp相关地图 API调用

目录 一、 注意事项&#xff1a; manifest.json需增加配置 二、获取用户收货地址 [uni.chooseAddress] 三、获取当前的地理位置、速度 [uni.getLocation] 四、打开地图选择位置、查看位置(导航) [uni.chooseLocation] [uni.openLocation] 五、使用腾讯地图逆地址解析接口实…

Java学习----NIO模型

在 Java 的 I/O 模型中&#xff0c;NIO&#xff08;Non - Blocking I/O&#xff0c;非阻塞 I/O&#xff09;是对 BIO 的重要改进。它为高并发场景提供了更高效的处理方式&#xff0c;在众多 Java 应用中发挥着关键作用。NIO模型的核心在于非阻塞和多路复用&#xff0c;其采用 “…