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

Kimi LeetCode 3620. 恢复网络路径 C++实现

LeetCode 3620. 恢复网络路径 C++ 实现

```cpp
#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
int findMaxPathScore(vector<vector<int>>& edges, vector<bool>& online, long long k) {
int n = online.size();
vector<vector<pair<int, int>>> g(n);

int l = INT_MAX, r = 0;

// 建图:过滤与离线节点相连的边
for (auto& e : edges) {
int u = e[0], v = e[1], w = e[2];
if (!online[u] || !online[v]) continue;
g[u].push_back({v, w});
l = min(l, w);
r = max(r, w);
}

// 没有有效边
if (l == INT_MAX) return -1;

// 检查:只使用 cost >= mid 的边,能否在总代价 <= k 内从 0 到达 n-1
auto check = [&](int mid) -> bool {
const long long INF = LLONG_MAX / 4;
vector<long long> dist(n, INF);
dist[0] = 0;

// 小根堆:{distance, node}
using P = pair<long long, int>;
priority_queue<P, vector<P>, greater<P>> pq;
pq.push({0, 0});

while (!pq.empty()) {
auto [d, u] = pq.top();
pq.pop();

if (d > k) return false; // 剪枝:已超过 k
if (u == n - 1) return true; // 到达终点
if (dist[u] < d) continue; // 已有更优路径

for (auto& [v, w] : g[u]) {
if (w < mid) continue; // 边权不足 mid,跳过

long long nd = d + w;
if (nd < dist[v]) {
dist[v] = nd;
pq.push({nd, v});
}
}
}
return false;
};

// 二分查找最大可行的最小边权
while (l < r) {
int mid = (l + r + 1) >> 1;
if (check(mid))
l = mid;
else
r = mid - 1;
}

return check(l) ? l : -1;
}
};
```

---

C++ 实现要点

要点 说明
`greater<P>` 小根堆 `priority_queue` 默认大根堆,用 `greater<>` 实现 Dijkstra 所需的小根堆
结构化绑定 `auto [d, u]` C++17 特性,简洁地解包 `pair`,代码更直观
防溢出 `dist` 使用 `long long`,初始化为 `LLONG_MAX / 4` 避免加法溢出
类型推导 `using P = ...` 简化 `priority_queue` 模板参数书写
边界处理 若所有边均连接离线节点,`l` 保持 `INT_MAX`,直接返回 `-1`

时间复杂度: `O((n + m) · log n · log W)`

空间复杂度: `O(n + m)`

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

相关文章:

  • 贪心算法在Karate Competition问题中的应用与优化
  • AI Mind 的多会话短期记忆容器:如何隔离多个聊天上下文
  • 艾尔登法环修改器下载代码 手残党必备
  • 如何永久保存微信聊天记录:打造个人数字记忆宝库的终极指南
  • 百达翡丽中国官方售后服务中心|最新地址及服务热线权威信息公告(2026年7月最新) - 百达翡丽服务中心
  • 生命涌现的小龙虾技能之【Pet Vaccination Reminder (Facial Recognition) | 宠物疫苗接种到期提醒(面部识别)】简介
  • Android NFC标签ID读取实现与优化指南
  • 终极指南:如何通过Qwerty Learner同时提升英语打字速度和单词记忆能力
  • Serverless不够用?混合架构实现确定性执行
  • Python概率模拟实践:从二项分布到游戏抽卡系统验证
  • 2026广州卫生间、阳台、地下室与屋顶防水维修指南,三类服务定位如何比较 - 盛隆防水
  • Minecraft服务器管理:快速筛选与显示创造模式玩家技术方案
  • Router 路由管理:pushUrl、replaceUrl、back 与参数传递
  • 影刀RPA 时间日期处理:定时任务与日期计算完全攻略
  • Java编程语言:从基础到企业级开发全解析
  • 欧米茄中国专柜官方服务电话2026年7月最新,客户热线客户必读 - 欧米茄官方服务中心
  • 佳能TS3380,TS3480,G1810,G2810,G4810,MG3580,MG3680,MG6880,IP2780,IP8780,IX6780故障码5b00,1700,p07,e08,5b02
  • 旅游信息管理系统
  • Codeforces Div.3竞赛解析与算法精讲
  • 深入解析TI OMAP PRCM时钟管理器:从DPLL原理到低功耗实战
  • 2026广州综合防水补漏榜单:看懂卫生间、阳台、地下室与屋顶维修与售后安排 - 盛隆防水
  • Amazon Redshift实战调优:DISTKEY、SORTKEY与WLM配置生死细节
  • Prompt Injection防护实战:基于847测试用例的多层防御框架
  • Display Driver Uninstaller终极指南:3步彻底解决显卡驱动残留问题
  • 鸿蒙 ArkTS 实战:Pinyin Match Fun 从拼音配对乐趣到记录管理完整解析
  • 佳能TR8580,MB5080,IB4080,IX6880,TS6080,TS6180,TS8180,TS9180报错5B00,5B02,5B04,1700,1702,1704,P07,E08清零软件
  • Outlook邮件发送功能原理与实战配置指南
  • 2026年7月最新亨得利官方服务项目及价格查询|服务热线与详细地址权威信息公告 - 亨得利官方博客
  • User-Agent详解:从基础概念到实战应用
  • 浪琴中国官方售后服务中心|全新地址及售后热线权威信息公示(2026年7月最新) - 浪琴服务中心