- μμ
λ³λ‘ μκ° λ° μμ‘΄ κ΄κ³κ° μ‘΄μ¬ν λ κ°μ₯ μ§§μ μκ°μ λͺ¨λ μμ
μ μλ£ν μ μλ κ²½μ°λ₯Ό μ°Ύλ λ¬Έμ .
- μμ
μ λ
Έλλ‘ ννλλ©° μμ‘΄ κ΄κ³λ κ·Έλνμ μ μΌλ‘ ννλλ€.
- μμ‘΄ κ΄κ³λ₯Ό μΈμ 리μ€νΈλ‘ ꡬμ±νλ λ°©ν₯μ λ°λλ‘ νλ€.
- λͺ¨λ λ
Έλ μ€ λ£¨νΈ λ
Έλ (λ§μ§λ§ μμ
)λ₯Ό ꡬνκ³ κ° λ£¨νΈ λ
Έλλ³λ‘ νμνμ¬ μ΄ μμ
μ λ£λλ° νμν μκ°μ ꡬνμ¬ map
dp
μ μ μ₯νλ€.
- λͺ¨λ κ²½λ‘ μ€ κ°μ₯ ν° κ°μ΄ λͺ¨λ μμ
μ μλ£νλλ° λλ μκ°μ΄λ€.
class Solution {
public:
void traverse(map<int,vector<int>>& adj, vector<int>& time, map<int,int>& dp, int i, int prev) {
int nTime = prev + time[i-1];
if (nTime < dp[i]) return;
dp[i] = nTime;
for (auto& j : adj[i]) {
traverse(adj, time, dp, j, nTime);
}
}
int minimumTime(int n, vector<vector<int>>& relations, vector<int>& time) {
map<int,vector<int>> adj;
set<int> leaf;
for (int i = 1; i <= n; ++i) {
leaf.insert(i);
}
for (auto& e : relations) {
adj[e[1]].push_back(e[0]);
leaf.erase(e[0]);
}
map<int,int> dp;
int result = 0;
for (auto i : leaf) {
traverse(adj, time, dp, i, 0);
}
for (auto entry : dp) {
result = max(result, entry.second);
}
return result;
}
};