【Leetcode】2065. Maximum Path Quality of a Graph

题目地址:

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为边数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值