Minimum Number of Vertices to Reach All Nodes

medium graph

Problem

Given a DAG, return the smallest set of starting vertices from which every node is reachable.

Inputn=6, edges=[[0,1],[0,2],[2,5],[3,4],[4,2]]
Output[0,3]
Only 0 and 3 have in-degree 0.

def find_smallest_set_of_vertices(n, edges):
    seen = [False] * n
    for _, v in edges: seen[v] = True
    return [i for i in range(n) if not seen[i]]
function findSmallestSetOfVertices(n, edges) {
  const seen = new Array(n).fill(false);
  for (const [, v] of edges) seen[v] = true;
  const out = [];
  for (let i = 0; i < n; i++) if (!seen[i]) out.push(i);
  return out;
}
class Solution {
    public List findSmallestSetOfVertices(int n, List> edges) {
        boolean[] seen = new boolean[n];
        for (List e : edges) seen[e.get(1)] = true;
        List out = new ArrayList<>();
        for (int i = 0; i < n; i++) if (!seen[i]) out.add(i);
        return out;
    }
}
vector findSmallestSetOfVertices(int n, vector>& edges) {
    vector seen(n, false);
    for (auto& e : edges) seen[e[1]] = true;
    vector out;
    for (int i = 0; i < n; i++) if (!seen[i]) out.push_back(i);
    return out;
}
Time: O(n + e) Space: O(n)