8 bool canFinish(
int numCourses, vector<vector<int>>& prerequisites)
10 unordered_map<int, list<int>> prereq_map;
11 for (vector<int>& node_prereq: prerequisites)
13 int node = node_prereq[0];
14 for (
int i = 1; i < (int)node_prereq.size(); ++i)
15 (prereq_map[node]).push_back(node_prereq[i]);
20 stack<int> node_stack;
23 for (
int i = 0; i < n; ++i)
25 if (visited.find(i) == visited.end())
28 while (!node_stack.empty())
30 int node = node_stack.top();
31 if (rec_stk.find(node) == rec_stk.end())
34 for (
int neighbor : prereq_map[node])
36 if (rec_stk.find(neighbor) != rec_stk.end())
38 if (visited.find(neighbor) == visited.end())
39 node_stack.push(neighbor);