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

DeepSeek LeetCode 2646. 最小化旅行的价格总和 C++实现

以下是 LeetCode 2646“最小化旅行的价格总和”的 C++ 实现,思路与 Java 版本一致,采用 DFS 统计节点访问次数 + 树形 DP。

C++ 代码

```cpp
class Solution {
vector<vector<int>> graph;
vector<int> price;
vector<int> count;

// 返回是否存在从 u 到 target 的路径,若存在则累加沿途节点的 count
bool dfsCount(int u, int parent, int target) {
if (u == target) {
count[u]++;
return true;
}
for (int v : graph[u]) {
if (v != parent && dfsCount(v, u, target)) {
count[u]++;
return true;
}
}
return false;
}

// 返回 pair: first = 当前节点不半价的最小总价, second = 当前节点半价的最小总价
pair<int, int> dfs(int u, int parent) {
int notHalf = price[u] * count[u]; // 当前节点不半价
int half = price[u] * count[u] / 2; // 当前节点半价

for (int v : graph[u]) {
if (v == parent) continue;
auto [childNotHalf, childHalf] = dfs(v, u);
notHalf += min(childNotHalf, childHalf); // 父不半价,子可选最优
half += childNotHalf; // 父半价,子必须不半价
}
return {notHalf, half};
}

public:
int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector<int>>& trips) {
this->price = price;
graph.resize(n);
for (auto& e : edges) {
graph[e[0]].push_back(e[1]);
graph[e[1]].push_back(e[0]);
}

count.assign(n, 0);
for (auto& trip : trips) {
dfsCount(trip[0], -1, trip[1]);
}

auto [rootNotHalf, rootHalf] = dfs(0, -1);
return min(rootNotHalf, rootHalf);
}
};
```

代码说明

1. 统计访问次数
dfsCount 函数递归查找从 start 到 end 的路径,并将路径上所有节点的 count 加 1。
2. 树形 DP
dfs 函数返回 pair<int,int>:
· first:当前节点 不半价 时,子树的最小总代价
· second:当前节点 半价 时,子树的最小总代价
3. 状态转移
· 当前节点不半价 → 子节点可以半价或不半价,取 min
· 当前节点半价 → 子节点 必须不半价
4. 最终答案
对根节点取 min(不半价, 半价)

复杂度分析

· 时间:O(n * m),n 为节点数,m 为路径数(最坏情况每条路径遍历整棵树)
· 空间:O(n),递归栈 + 邻接表

优化提示

如果数据规模较大(例如 n, m <= 10^5),可以使用 LCA + 差分数组 优化路径统计,将单次路径复杂度降为 O(log n)。需要我提供这个优化版本吗?

http://www.zskr.cn/news/1388491.html

相关文章:

  • 2026年北京朝阳区搬家公司排行榜多维度测评推荐+避坑指南 - 余小铁
  • 杰理701N SDK蓝牙回连实战:从可视化配置到代码调试,手把手教你搞定耳机断连重连
  • 中国医学科学研究院考研辅导班靠谱推荐:高性价比与良好口碑实力选择 - michalwang
  • 2026年京东云618活动时间、活动入口、优惠活动详细解读
  • 告别make menuconfig:深度解析U-Boot源码目录结构与Makefile的编译奥秘
  • 鸿蒙Hi3861开发板智能小车项目拆解:STM32驱动板、JSON通信协议与微信小程序端是怎么联动的?
  • CentOS7 OpenSSL 1.1.1 ABI冲突与安全隔离部署指南
  • 2026 年福建莆田全屋高端定制家居设计与选材选型指南
  • 为自托管AI构建安全Shell沙盒:Docker容器隔离实践
  • 构建低成本高可用网络爬虫系统:从架构设计到成本控制实战
  • 读书笔记 GenAI FinOps vs. Cloud FinOps:同根同源,挑战各异
  • 安全攻防 - 03 TLCP 握手:双证书、密码套件与常见术语
  • 2026年岳阳市正规上门黄金白银回收品牌门店名录 K金+铂金+金条+银条回收门店联系方式推荐+指南 - 盛世金银回收
  • 网站上线两个月,360和必应就是不收录?我是怎么靠蜘蛛池把这事翻盘的
  • 别再盲选大模型了!DeepSeek-V2/V3/R1在中文长文本、代码生成、数学推理三类场景的TOP-1准确率差距高达23.6%,你用对版本了吗?
  • 01-认知篇-总览-HybridCLR是什么
  • 创客匠人:当知识付费遇上AI:学习这件事正在悄悄改变
  • iOS真机自动化测试连不上?WebDriverAgent签名与Appium配置深度解析
  • 2026 年 AI 开发,避坑选型完整攻略
  • Google Trends 找蓝海赛道:独立开发者如何挖出没人做、但有人搜的项目
  • 2026年镇江市本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 大熊猫898989
  • 正规GEO优化和投毒GEO优化的区别,沧州本地GEO优化公司-沧州盘古网络精准分析
  • UE4动画蓝图实战:用双骨骼IK节点搞定手部穿墙问题(附完整蓝图节点截图)
  • 【研知有术论文发表】轻松Accept!小类一区人工智能SCI期刊,非常好投,拒稿率低!
  • 避坑指南:Unity 2018/2019 WebGL透明背景失效?检查ColorSpace和PostProcessing
  • 安全攻防 - 02 标准背景:国际 TLS、RFC 8998 与中国 TLCP
  • 别再手动加密了!用RuoYi-Vue-Plus的Encrypt组件,5分钟搞定Mybatis数据自动加解密
  • 2026年运城市正规上门黄金白银回收品牌门店名录 K金+铂金+金条+银条回收门店联系方式推荐+指南 - 盛世金银回收
  • TPS薄板样条:一个物理模型如何优雅地解决图像变形问题?
  • 前端SEO优化包括哪些方面?避免网页不收录的5个代码雷区