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

P1462 通往奥格瑞玛的道路 题解

题面

解析

题面直接说了最大值最小二分无疑
看到这题的应该都想到了最短路吧,但是一看又要管花费,还要管血量立马慌了,但是其实没有那么复杂

二分歪嘴哦经过城市单次交费最大值\(x\)(不是等会代码的x,这里只是便于书写),通过 Dijkstra算法 得到对于这个\(x\)的最小耗血,\(x\)越大能走的路一定不会变少,耗血自然不会少,等到能活下来\(x\)最小,答案就出来了

代码

alt text

会被hack的代码,\(WA\), \(100pts\)

#include <bits/stdc++.h>using namespace std;constexpr int N = 5e4 + 2;int n, m, b;
int v[N], d[N];
bool f[N];
vector<pair<int, int>> a[N];inline void read() {cin >> n >> m >> b;for (int i = 1; i <= n; i++) {cin >> v[i];}for (int i = 1; i <= m; i++) {int u, v, w;cin >> u >> v >> w;a[u].push_back({v, w});a[v].push_back({u, w});}
}inline bool check(int mx) {for (int k = 1; k <= N; k++) {d[k] = (1 << 30);}memset(f, 0, sizeof f);priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;q.push({0, 1});d[1] = 0;while (!q.empty()) {auto t = q.top();q.pop();int now = t.second;if (f[now]) continue;f[now] = true;for (auto i : a[now]) {int x = i.first, y = i.second;if (v[x] > mx) continue;if (d[x] > d[now] + y) {d[x] = d[now] + y;q.push({d[x], x});}}}int mi = d[n];if (b - mi >= 0)return true;elsereturn false;
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);read();int l = 0, r = 1e9;int ans = -1;while (l <= r) {int mid = (l + r) / 2;if (check(mid))r = mid - 1, ans = mid;elsel = mid + 1;}if (ans == -1)cout << "AFK";elsecout << ans;return 0;
}
关于hack

上面的代码,没有考虑原点是否会超收费!

\(AC\),\(100pts\)

#include <bits/stdc++.h>using namespace std;constexpr int N = 5e4 + 2;
#define int long longint n, m, b;
int v[N], d[N];
bool f[N];
vector<pair<int, int>> a[N];inline void read() {cin >> n >> m >> b;for (int i = 1; i <= n; i++) {cin >> v[i];}for (int i = 1; i <= m; i++) {int u, v, w;cin >> u >> v >> w;a[u].push_back({v, w});a[v].push_back({u, w});}
}inline bool check(int mx) {if (v[1] > mx) return false;for (int k = 1; k <= N; k++) {d[k] = (1 << 30);}memset(f, 0, sizeof f);priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;q.push({0, 1});d[1] = 0;while (!q.empty()) {auto t = q.top();q.pop();int now = t.second;if (f[now]) continue;f[now] = true;for (auto i : a[now]) {int x = i.first, y = i.second;if (v[x] > mx) continue;if (d[x] > d[now] + y) {d[x] = d[now] + y;q.push({d[x], x});}}}int mi = d[n];if (b - mi >= 0)return true;elsereturn false;
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);read();int l = 0, r = 1e9;int ans = -1;while (l <= r) {int mid = (l + r) / 2;if (check(mid))r = mid - 1, ans = mid;elsel = mid + 1;}if (ans == -1)cout << "AFK";elsecout << ans;return 0;
}

看懂?点赞?

http://www.jsqmd.com/news/586051/

相关文章:

  • MQTT控制ESP32
  • 2026年4月全球充电站加盟品牌评测:五家口碑产品推荐评价靠谱 - 品牌推荐
  • 如何用luci-app-dockerman实现Docker容器轻松掌控与高效管理?
  • 【MicroPython编程-ESP32篇:设备驱动】-PCF8591数据采集驱动
  • Campus-iMaotai:告别手动抢茅台,实现智能自动预约的完整解决方案
  • 深度学习训练营打卡记录——W3_P3
  • 3步解锁网盘直链:LinkSwift八大平台高速下载完全指南
  • yz-bijini-cosplay入门必看:Z-Image中英混合提示词工程最佳实践
  • yz-bijini-cosplay惊艳效果:多光源环境下Cosplay角色面部光影层次还原
  • SEO_深入解读搜索引擎算法与SEO核心原理
  • 利用快马平台十分钟搭建基于langchain的智能文档问答原型
  • 谷歌 Gemma 4 实战部署指南:从开源协议解读到本地推理落地
  • Vue大屏自适应终极解决方案:v-scale-screen深度解析与实践指南
  • 安全是跑出来的:从萝卜快跑看自动驾驶的“成人礼”
  • 新手入门:借助快马平台轻松理解并解决战网更新睡眠问题
  • 最简单的赛博朋克2077 dll丢失修复教程:d3dx9_43.dll缺失怎么办
  • 终极指南:三步骤掌握AMD Ryzen处理器深度调试与性能优化
  • 2026年AI自动化测试工具全景:从单元测试到端到端覆盖
  • 智能体快速构建指南
  • 2026年Turnitin AI检测对留学生论文的影响:检测标准和应对方案
  • Java全栈开发工程师的面试实录:从基础到实战
  • 通义千问3-Reranker-0.6B开箱即用:国产信创服务器上的语义裁判快速搭建
  • 如何建立有利于SEO的网站内容体系_网站 SEO 优化的周期是多长时间
  • 2026年靠谱的推荐出租蜘蛛车公司排名,高智捷位居前列 - 工业品牌热点
  • Nunchaku-flux-1-dev企业级部署:内网穿透方案与安全配置
  • 技术突破:系统性能提升23%的优化秘籍,第四十天:成绩排序。
  • ReTerraForged地形引擎:从零构建个性化游戏世界的完整方案
  • 深度解析:OBS VirtualCam插件如何实现Windows虚拟摄像头解决方案
  • 快马平台五分钟速成:用AI生成你的第一个电商数据爬虫原型
  • G-Helper终极指南:华硕笔记本性能控制工具快速入门教程