洛谷p1462-通往奥格瑞码道路

news/2025/10/16 20:32:49/文章来源:https://www.cnblogs.com/leeezhusl/p/19146570

题目:https://www.luogu.com.cn/problem/P1462
思考过程:
刚拿到这个题,我把消耗的血量和路费当成了负权边去考虑,考虑到我们只需要考虑扣钱的最优,并且在血量扣尽之前达到就好,那我觉得可以用一个数组hp来代表实时血量,拿一个值来更新目前到这个点的最大花费,我觉得肯定是优先走钱少的点,如果hp被扣完了,再回溯走下一个。
如果按我这个思路走就是dij+spfa+贪心+dfs,就特别麻烦,后来看题解思路意识到,“最大的最小,最小的最大”之类的题,用二分。
那么这道题就可以用二分加dij简易实现。用二分查找一个值,这个值要介于f数组最小和最大之间才能构成二分。然后判断是否存在这么一条路,如果能在hp减为0之前能达到,说明这个mid值是ok的,就可以继续降低mid值,反之增大。
接下来是代码实现:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll INF=1e18;
bool check(ll mid,int n,int b,const vector<int>&ff,const vector<vector<pair<int,int>>>&gg){if(ff[1]>mid||ff[n]>mid) return false;vector<ll>dist(n+1,INF);vector<bool>vis(n+1,false);priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>>pq;pq.push({0,1});dist[1]=0;// vis[1]=true;while(!pq.empty()){auto[d,u]=pq.top();pq.pop();if(vis[u]) continue;vis[u]=true;for(auto[v,w]:gg[u]){if(ff[v]<=mid){if(d+w<dist[v]){dist[v]=d+w;pq.push({dist[v],v});}}}}return dist[n]<=b;
}
void solve(){int n,m;ll b;cin>>n>>m>>b;vector<int>f(n+1);int maxf=0;for(int i=1;i<=n;i++){// int f;cin>>f[i];maxf=max(maxf,f[i]);}vector<vector<pair<int,int>>>g(n+1);for(int i=0;i<m;i++){int u,v,w;cin>>u>>v>>w;g[u].push_back({v,w});g[v].push_back({u,w});}ll l=0;ll r=ll(maxf)+1;ll ans=-1;while(l<=r){ll mid=(l+r)>>1;if(check(mid,n,b,f,g)){ans=mid;r=mid-1;}else l=mid+1;}if(ans==-1) cout<<"AFK\n";else cout<<ans<<"\n";
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}

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

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

相关文章

详细介绍:VR 太阳光参数与快速渲染

详细介绍:VR 太阳光参数与快速渲染pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

位运算中没用的小技巧

位运算那些没用的小技巧消去最后一位的1 x & (x - 1)交换两个数 a ^= b; b ^= a; a ^= b;检查一个数的奇偶 x & 1求x的绝对值 ~(x >> 31) ? a : ~a + 1取两个数的最大值 x ^ ((x ^ y) & -(x < y…

超越基础:SightAI 智能路由与多模型选择实战 - sight

在第一周的入门指南中,我们已经学会了如何使用 SightAI 的基础 API 调用,实现了一个简单的对话交互。不少开发者会面临新的需求:想降低推理成本时,如何找到性价比更高的模型?追求交互速度时,怎样获取更快的响应?…

kafka连接认证

kafka连接认证明白,我帮你整理一份 Kafka 客户端三阶段检查完整文档,涵盖原理、检查目的、可能异常、排查方法以及你之前脚本逻辑对应的解释。文档形式清晰,方便阅读和运维参考。Kafka 客户端三阶段连接检查完整文档…

[Vulhub靶机]JARBAS靶机渗透

[Vulhub靶机]JARBAS靶机渗透 靶机搭建 下载地址: https://download.vulnhub.com/jarbas/Jarbas.zip 下载后设置nat模式即可与攻击机同一网段 kali:192.168.88.1331.信息收集 主机发现 首先对C段进行扫描,发现131这台主…

CF622D 题解

很好的一道思维题。 容易发现答案下界是 \(0\),手模几组发现好像都能取到,考虑能不能找到构造答案为 \(0\) 的通解。 那么除了 \(i=n\) 以外的所有 \(i\) 都应该有 \(d_i=n-i\),考虑构造这个东西,然后最后 \(n\) 随…

vue学习的总结

vue学习如何判断vue框架: (1)使用插件(最无脑的) (2)判断是否有id为app的div (3)判断站点是否只有一个index.html (4)可以用findVueRoot函数 (5)使用油猴的脚本进行清除路由若能清除也可以判断为vue(油猴…

最小二乘问题详解5:非线性最小二乘求解实例

通过拟合非线性函数的实例,详细讲解了非线性最小二乘问题中Gauss-Newton方法的实现过程,并给出了基于Eigen库的C++代码示例及收敛分析。1. 引言 在上一篇文章《最小二乘问题详解4:非线性最小二乘》中,介绍了非线性…

【28】C# WinForm入门到精通 ——多文档窗体MDI【属性、强大的方法、实例、源码】【多窗口重叠、水平平铺、垂直平铺、窗体传值】

【28】C# WinForm入门到精通 ——多文档窗体MDI【属性、强大的方法、实例、源码】【多窗口重叠、水平平铺、垂直平铺、窗体传值】pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

第五周预习

20231313 张景云《密码系统设计》第五周预习AI对内容的总结 Windows.C.C++.加密解密实战.sm.ys 一、数字签名技术基础背景与意义:互联网信息安全问题突出,如网站篡改、仿冒页面等,数字签名技术作为基于密码学的安全…

2025 非标门/铸铝门/别墅大门厂家推荐榜:聚焦品质与服务的实力之选

在建筑建材领域,门作为空间防护与装饰的核心载体,其品质直接关系到居住安全与生活体验。市面上门业厂商众多,产品性能与服务质量参差不齐。基于技术实力、产品适配性、市场口碑等多维度考量,本文筛选出五家各具优势…

工业数字化未来:IT与OT融合实践

本文探讨数字技术在工业与运营环境中的实际应用,包括远程诊断系统、统一登录平台和跨设备协作解决方案,分析如何通过优化数字员工体验提升生产力与安全性,并介绍多家机构在IT与OT融合过程中的实践经验。工业运营工作…

AI安全新威胁:提示注入与模型中毒攻击深度解析

本文深入探讨AI安全领域两大新兴威胁:提示注入与模型中毒攻击。详细分析直接注入、间接注入、多模态注入等攻击技术,以及数据投毒、后门植入等模型威胁,为企业安全团队提供全面的防御策略和实战案例。提示注入与模型…

神经网络入门研读报告

神经网络入门研读报告:基于数据驱动的机器认知模型 神经网络是一种模拟生物神经系统信息处理机制的机器学习模型,核心功能是通过多层非线性变换,从结构化或非结构化数据中自动学习特征与规律,实现分类、预测等认知…

阅读《记录一类分治方法》笔记

目前只有题一。阅读《记录一类分治方法》笔记 题一 \(n\) 个点的无向图,边有边权。\(q\) 次操作,每次操作是添加/删除一条边、修改一条边的边权、查询最小生成树这四种之一。 前言 其实只看了题一,后面都还没看呢。…

CF2140E2

给定 \(n(1 \le n\le 20), m(1 \le m \le 10^6)\) 和一些 \(p_i\)。有 \(n\) 堆石子,每堆石子有 \(1 \sim m\) 个。两个人进行博弈,每次每个人可以取走第 \(p_i\) 堆石子(\(i\) 任选),然后剩下的石堆重新编号,直…

Codeforces 380E Sereja and Dividing 题解 [ 紫 ] [ 线段树 ] [ 贪心 ] [ 数学 ]

Sereja and Dividing:一年前的模拟赛就能秒这个 *2600 了,可我现在怎么还这么菜 /ll/ll/ll。 先考虑当杯子的集合固定时如何选择,显然一个杯子不会被选第二次,并且杯子从大到小选一定是最优的。证明只需要列出最后…

JPA教程

一 什么是 Spring Data JPA Spring Data JPA 是 Spring 框架的一个子项目,它简化了基于 JPA (Java Persistence API) 的数据访问层开发。它通过提供一套抽象接口,减少了开发者编写重复性的数据访问代码的工作量,使开…

实验指导-基于阿里云Serverless应用引l擎SAE的服务部署迀移 - 详解

实验指导-基于阿里云Serverless应用引l擎SAE的服务部署迀移 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

夜莺监控设计思考(二)边缘机房架构思考

这将是一个系列,讲解 夜莺监控 的设计思考,可以理解为原理+最佳实践+产品设计时的折中取舍。 本系列其他文章:夜莺监控设计思考(一)项目定位、组件思考、单进程多进程选择、高可用设计下面开始第2篇。 上一篇我们…