Skip to content

Commit 9258ad7

Browse files
authored
Create course-schedule-iv.cpp
1 parent eb13076 commit 9258ad7

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

C++/course-schedule-iv.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Time: O(n^3)
2+
// Space: O(n^2)
3+
4+
class Solution {
5+
public:
6+
vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
7+
const auto& reachable = floydWarshall(n, prerequisites);
8+
vector<bool> result;
9+
for (const auto& q : queries) {
10+
result.emplace_back(reachable.count(q[0] * n + q[1]));
11+
}
12+
return result;
13+
}
14+
15+
private:
16+
unordered_set<int> floydWarshall(int n, const vector<vector<int>>& graph) {
17+
unordered_set<int> reachable;
18+
for (const auto& connected : graph) {
19+
reachable.emplace(connected[0] * n + connected[1]);
20+
}
21+
for (int k = 0; k < n; ++k) {
22+
for (int i = 0; i < n; ++i) {
23+
for (int j = 0; j < n; ++j) {
24+
if (!reachable.count(i * n + j) &&
25+
(reachable.count(i * n + k) && reachable.count(k * n + j))) {
26+
reachable.emplace(i * n + j);
27+
}
28+
}
29+
}
30+
}
31+
return reachable;
32+
}
33+
};
34+
35+
// Time: O(n * q)
36+
// Space: O(p + n)
37+
class Solution_TLE {
38+
public:
39+
vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
40+
unordered_map<int, vector<int>> graph;
41+
for (const auto& connected : prerequisites) {
42+
graph[connected[0]].emplace_back(connected[1]);
43+
}
44+
vector<bool> result;
45+
for (const auto& q : queries) {
46+
vector<int> stk = {q[0]};
47+
unordered_set<int> lookup = {q[0]};
48+
while (!stk.empty()) {
49+
const auto node = stk.back(); stk.pop_back();
50+
for (const auto& nei : graph[node]) {
51+
if (lookup.count(nei)) {
52+
continue;
53+
}
54+
stk.emplace_back(nei);
55+
lookup.emplace(nei);
56+
}
57+
}
58+
result.emplace_back(lookup.count(q[1]));
59+
}
60+
return result;
61+
}
62+
};

0 commit comments

Comments
 (0)