leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
1462.cpp (2904B)
0 // DFS
1 class Solution {
2 public:
3 vector<bool> checkIfPrerequisite(int numCourses, vector<vector<int>> &prerequisites,
4 vector<vector<int>> &queries) {
5 vector<vector<int>> adj(numCourses);
6 vector<unordered_set<int>> pre(numCourses);
8 for (auto &p : prerequisites)
9 adj[p[0]].push_back(p[1]);
11 for (int i = 0; i < numCourses; i++) {
12 unordered_set<int> visited;
13 stack<int> st;
14 st.push(i);
15 visited.insert(i);
16 while (!st.empty()) {
17 int crnt = st.top();
18 st.pop();
19 for (int &c : adj[crnt]) {
20 if (visited.count(c)) continue;
21 visited.insert(c);
22 pre[c].insert(i);
23 st.push(c);
24 }
25 }
26 }
28 vector<bool> res;
29 for (auto &p : queries)
30 res.push_back(pre[p[1]].count(p[0]));
31 return res;
32 }
33 };
35 // Topological sort with dependency propagation
36 class Solution {
37 public:
38 vector<bool> checkIfPrerequisite(int numCourses, vector<vector<int>> &prerequisites,
39 vector<vector<int>> &queries) {
40 vector<unordered_set<int>> pre(numCourses);
41 vector<vector<int>> adj(numCourses);
42 vector<int> count(numCourses);
44 for (auto &p : prerequisites) {
45 adj[p[0]].push_back(p[1]);
46 count[p[1]]++;
47 }
49 queue<int> q;
50 for (int i = 0; i < numCourses; i++)
51 if (!count[i]) q.push(i);
53 while (!q.empty()) {
54 int crnt = q.front();
55 q.pop();
56 for (int &c : adj[crnt]) {
57 pre[c].insert(crnt);
58 pre[c].insert(pre[crnt].begin(), pre[crnt].end());
59 if (!--count[c]) q.push(c);
60 }
61 }
63 vector<bool> res;
64 for (auto &p : queries)
65 res.push_back(pre[p[1]].count(p[0]));
66 return res;
67 }
68 };
70 // Topological sort using bitseclass Solution {
71 public:
72 vector<bool> checkIfPrerequisite(int numCourses, vector<vector<int>> &prerequisites,
73 vector<vector<int>> &queries) {
74 vector<bitset<100>> pre(numCourses);
75 vector<vector<int>> adj(numCourses);
76 vector<int> count(numCourses);
78 for (auto &p : prerequisites) {
79 adj[p[0]].push_back(p[1]);
80 count[p[1]]++;
81 }
83 queue<int> q;
84 for (int i = 0; i < numCourses; i++)
85 if (!count[i]) q.push(i);
87 while (!q.empty()) {
88 int crnt = q.front();
89 q.pop();
90 for (int &c : adj[crnt]) {
91 pre[c].set(crnt);
92 pre[c] |= pre[crnt];
93 if (!--count[c]) q.push(c);
94 }
95 }
97 vector<bool> res;
98 for (auto &p : queries)
99 res.push_back(pre[p[1]][p[0]]);
100 return res;
101 }
102 }
103 ;