SOLUTION INFO
C++ · 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
풀이 설명
등록된 풀이 설명이 없습니다.