class Solution {
public:
    void dfs(int node, vector<vector<int>>& graph, vector<bool>& safe, vector<bool>& vis)
    {
        if(vis[node]) return;
        vis[node] = true;
        if(graph[node].size() == 0)
        {
            safe[node] = true;
        }
        bool res = true;
        for(auto v : graph[node])
        {
            dfs(v, graph, safe, vis);
            res &= safe[v];
        }
        safe[node] = res;
    }
    vector<int> eventualSafeNodes(vector<vector<int>>& graph) {
        vector<bool> safe(graph.size(), false), vis(graph.size(), false);
        int n = graph.size();
        for(int i = 0; i < n; i++)
        {
            dfs(i, graph, safe, vis);
        }
        vector<int> ans;
        for(int i = 0; i < n; i++)
        {
            if(safe[i]) ans.push_back(i);
        }
        return ans;
    }
};
Comments (0)