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);}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!