LeetCode #2467

Most Profitable Path in a Tree

1개의 풀이 · C++

문제 원문 보기 ↗

SOLUTION INFO

C++ · main.cpp

main.cpp
class Solution {
public:
    int mostProfitablePath(vector<vector<int>>& edges, int bob, vector<int>& amount) {
        int N = (int)amount.size();
        vector<vector<int>> G(N);
        for(int i = 0; i < (int)edges.size(); ++i) {
            int u = edges[i][0], v = edges[i][1];
            G[u].emplace_back(v); G[v].emplace_back(u);
        }
        vector<int> dist(N);
        function<int(int, int, int)> dfs = [&](int cur, int prev, int dep) -> int {
            dist[cur] = cur == bob ? 0 : N;
            int mx = INT_MIN, mx2 = 0;
            for(int nxt: G[cur]) {
                if(nxt == prev) continue;
                mx = max(mx, dfs(nxt, cur, dep + 1));
                dist[cur] = min(dist[cur], dist[nxt] + 1);
            }
            if(dist[cur] > dep) mx2 += amount[cur];
            else if(dist[cur] == dep) mx2 += amount[cur] / 2;
            return mx == INT_MIN ? mx2 : mx + mx2;
        };
        return dfs(0, 0, 0);
    }
};

SOLUTION DESCRIPTION

풀이 설명

등록된 풀이 설명이 없습니다.