题目地址:
https://leetcode.com/problems/maximum-path-quality-of-a-graph/description/
给定一个带权无向图,每条边权值为正,每个点也带非负点权。从编号为 0 0 0的点出发,周游一圈回到 0 0 0,可以求得这一圈的总边权和总点权,其中点权不重复计算,同一点可以访问多次。规定一个最大总边权,问在总边权不超过给定最大总边权的情况下,最大总点权是多少。
直接暴力搜索即可。代码如下:
class Solution {
public:
int res;
int maximalPathQuality(vector<int>& vs, vector<vector<int>>& es,
int maxTime) {
int n = vs.size();
vector<vector<pair<int, int>>> g(n);
for (auto& e : es) {
g[e[0]].push_back({e[1], e[2]});
g[e[1]].push_back({e[0], e[2]});
}
vector<int> vis(n);
dfs(0, 0, 0, maxTime, g, vs, vis);
return res;
}
void dfs(int u, int score, int time, int maxTime,
vector<vector<pair<int, int>>>& g, vector<int>& vs,
vector<int>& vis) {
// 总边权超过最大边权了,则返回
if (time > maxTime) return;
if (!vis[u]) score += vs[u];
vis[u]++;
if (!u) res = max(res, score);
for (auto& p : g[u])
dfs(p.first, score, time + p.second, maxTime, g, vs, vis);
vis[u]--;
}
};
时间复杂度指数级,空间 O ( E ) O(E) O(E), E E E为边数。