-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path207-course-schedule.cpp
More file actions
36 lines (35 loc) · 1.03 KB
/
207-course-schedule.cpp
File metadata and controls
36 lines (35 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <vector>
#include <unordered_map>
#include <deque>
using namespace std;
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
vector<vector<int>> adj(numCourses, vector<int>());
unordered_map<int, int> deg;
for (auto& vec : prerequisites) {
adj[vec[0]].push_back(vec[1]);
deg[vec[1]]++;
}
for (int course = 0; course < numCourses; ++course) {
if (!deg.count(course))
deg[course] = 0;
}
deque<int> ready;
for (auto& [node, degree] : deg) {
if (degree == 0)
ready.push_back(node);
}
int count = 0;
while (ready.size()) {
int next = ready.front(); ready.pop_front();
++count;
for (auto& neighbor : adj[next]) {
deg[neighbor]--;
if (deg[neighbor] == 0)
ready.push_back(neighbor);
}
}
return count == numCourses;
}
};