../ Competitive Programming
-rw-r--r--aguang1.2 KiB1 min read

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;
    }
};

COMMAND INTERFACE

↑ ↓ navigate · Enter execute · Esc exit · try “whoami”

Loading filesystem…

:help aguang.xyz

A personal website disguised as an operating system.

Ctrl / Cmd + K
Command palette + full-text search
Tab / Shift + Tab
Move between links and controls
Enter
Open a focused link or search result
↑ / ↓ in search
Navigate search results
In a directory filter
Enter/Done or ↓ focuses a result; Esc clears the filter
Esc
Clear a search or close a window