本文主要是介绍Leetcode—2646.最小化旅行的价格总和【困难】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2023每日刷题(五十三)
Leetcode—2646.最小化旅行的价格总和
算法思想
看灵神的
实现代码
class Solution {
public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector<int>>& trips) {vector<int> g[n];for(auto e: edges) {int start = e[0], end = e[1];g[start].emplace_back(end);g[end].emplace_back(start);}vector<int> cnt(n);for(auto t: trips) {int end = t[1];function<bool(int, int)> dfs = [&](int x, int fa) {if(x == end) {cnt[x]++;return true;}for(auto y: g[x]) {if(y != fa && dfs(y, x)) {cnt[x]++;return true;}}return false;};dfs(t[0], -1);}function<pair<int, int>(int, int)> dfs2 = [&](int x, int fa) -> pair<int, int> {int not_half = price[x] * cnt[x];int half = not_half / 2;for(auto y: g[x]) {if(y != fa) {auto [nh, h] = dfs2(y, x);// x点不变, y可变可不变not_half += min(nh, h);// x点减半, y不变half += nh;}}return {not_half, half};};auto [nh, h] = dfs2(0, -1);return min(nh, h);}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!
这篇关于Leetcode—2646.最小化旅行的价格总和【困难】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!