Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- vector<int> loudAndRich(vector<vector<int>>& richer, vector<int>& quiet) {
- int n = quiet.size();
- vector<vector<int>> graph(n);
- for(auto edge: richer)
- graph[edge[1]].push_back(edge[0]);
- vector<int> ans(n, -1);
- for(int i=0; i<n; i++){
- if(ans[i] == -1)
- dfs(i, graph, quiet, ans);
- }
- return ans;
- }
- int dfs(int node, vector<vector<int>> &graph, vector<int>& quiet, vector<int> &ans){
- if(ans[node] != -1) return (quiet[ans[node]] < quiet[node]) ? ans[node] : node;
- int res = node;
- for(auto child: graph[node]){
- int subtreeSmall = dfs(child, graph, quiet, ans);
- if(quiet[res] > quiet[subtreeSmall])
- res = subtreeSmall;
- }
- return ans[node] = res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement