Leet Code Daily 2024-06-29 - All Ancestors of a Node in a Directed Acyclic Graph
Code
● ● ●c++class Solution {
public:
void compute(int x, unordered_map<int, set<int>>& ancestors,
unordered_map<int, set<int>>& parent) {
if (ancestors.find(x) == ancestors.end()) {
for (const auto y : parent[x]) {
compute(y, ancestors, parent);
ancestors[x].insert(ancestors[y].begin(), ancestors[y].end());
ancestors[x].insert(y);
}
}
}
vector<vector<int>> getAncestors(int n, vector<vector<int>>& edges) {
unordered_map<int, set<int>> parent;
for (const auto& edge : edges) {
parent[edge[1]].insert(edge[0]);
}
unordered_map<int, set<int>> ancestors;
for (int i = 0; i < n; i++) {
compute(i, ancestors, parent);
}
vector<vector<int>> answer;
for (int i = 0; i < n; i++) {
answer.push_back(
vector<int>(ancestors[i].begin(), ancestors[i].end()));
}
return answer;
}
};