-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheckIfPrerequisite.py
More file actions
32 lines (30 loc) · 1017 Bytes
/
checkIfPrerequisite.py
File metadata and controls
32 lines (30 loc) · 1017 Bytes
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
class Solution:
def checkIfPrerequisite(self, numCourses: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]:
indegrees = [0] * numCourses
outgoing = defaultdict(set)
pre = defaultdict(set)
for c,p in prerequisites:
indegrees[c] += 1
pre[c].add(p)
outgoing[p].add(c)
queue = deque()
for i,indegree in enumerate(indegrees):
if indegree == 0:
queue.append(i)
while queue:
cor = queue.pop()
courses = outgoing[cor]
pres = pre[cor]
for cr in courses:
for t in pres:
pre[cr].add(t)
indegrees[cr] -= 1
if indegrees[cr] == 0:
queue.append(cr)
res = []
for c,p in queries:
if p in pre[c]:
res.append(True)
else:
res.append(False)
return res