class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
unordered_map<int, vector<int>> dependencies;
vector<int> indegree = vector(numCourses, 0);
for(vector<int> prereq : prerequisites) {
dependencies[prereq[1]].push_back(prereq[0]);
indegree[prereq[0]]++;
}
queue<int> zero_indegree;
for(int course = 0; course < numCourses; course++) {
if(indegree[course] < 1) {
zero_indegree.push(course);
}
}
int courses_seen = 0;
while(!zero_indegree.empty()) {
int course = zero_indegree.front();
zero_indegree.pop();
courses_seen++;
for(int dependent_course : dependencies[course]) {
indegree[dependent_course]--;
if(indegree[dependent_course] < 1) {
zero_indegree.push(dependent_course);
}
}
}
return(courses_seen == numCourses);
}
};