2065. 最大化一张图中的路径价值
题目链接:2065. 最大化一张图中的路径价值
代码如下:
//参考链接:https://leetcode.cn/problems/maximum-path-quality-of-a-graph/solutions/1088414/bao-sou-jian-zhi-by-endlesscheng-iv6z
class Solution
{
public:
int maximalPathQuality(vector<int>& values, vector<vector<int>>& edges, int maxTime)
{
vector<vector<pair<int, int>>> graph(values.size());
//构建图
for (int i = 0; i < edges.size(); i++)
{
graph[edges[i][0]].emplace_back(make_pair(edges[i][1], edges[i][2]));
graph[edges[i][1]].emplace_back(make_pair(edges[i][0], edges[i][2]));
}
int res = 0;
vector<int> visited(values.size(), false);
visited[0] = true;
auto dfs = [&](auto&& dfs, int x, int sum_time, int sum_value)->void
{
if (x == 0) { res = max(res, sum_value); }
for (const pair<int,int>& p : graph[x])
{
if (sum_time + p.second > maxTime) { continue; }
if (visited[p.first])
{
dfs(dfs, p.first, sum_time + p.second, sum_value);
}
else
{
visited[p.first] = true;
//每个结点的价值至多算入价值总和中一次
dfs(dfs, p.first, sum_time + p.second, sum_value + values[p.first]);
visited[p.first] = false;//恢复现场
}
}
};
dfs(dfs, 0, 0, values[0]);
return res;
}
};