news 2026/5/26 7:44:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)。需要我提供这个优化版本吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 7:36:04

2026 年 AI 开发,避坑选型完整攻略

那天我们凌晨一点半发现模型崩了——办公区只剩应急灯亮着&#xff0c;服务器告警的红色弹窗铺满了监控大屏&#xff0c;刚上线72小时的AI智能知识库系统&#xff0c;在用户访问峰值直接陷入瘫痪。我盯着屏幕上滚动的报错日志&#xff0c;团队里刚熬完通宵的工程师们沉默地站在…

作者头像 李华
网站建设 2026/5/26 7:35:59

提升编程效率:6个ChatGPT精准提示技巧与工程实践

1. 从工具到伙伴&#xff1a;重新定义与ChatGPT的编程协作如果你还在把ChatGPT当作一个简单的代码生成器&#xff0c;或者一个偶尔问问题的“搜索引擎”&#xff0c;那可能错过了它作为编程伙伴90%的潜力。过去一年&#xff0c;我深度将ChatGPT&#xff08;特别是GPT-4系列模型…

作者头像 李华
网站建设 2026/5/26 7:34:53

从零构建Unity自然场景:地形雕琢、水体渲染与生态植被系统实战

1. 地形雕琢&#xff1a;从零搭建你的虚拟世界骨架第一次打开Unity的Terrain工具时&#xff0c;我盯着那一片平坦的白色地面发呆了十分钟——这就像面对一块未雕刻的大理石&#xff0c;既充满可能又让人无从下手。经过多个项目的实战&#xff0c;我总结出一套分阶段雕刻法&…

作者头像 李华
网站建设 2026/5/26 7:31:59

别再死记硬背了!用Python代码5分钟搞懂模运算的4个核心公式

别再死记硬背了&#xff01;用Python代码5分钟搞懂模运算的4个核心公式模运算在密码学、哈希算法和分布式系统中无处不在&#xff0c;但教科书式的数学推导往往让初学者望而生畏。本文将通过可交互的Python代码&#xff0c;带您从编程视角重新理解模运算的四大核心公式&#xf…

作者头像 李华