Course Schedule LeetCode solution in Python
1class Solution:2def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:34pre = {} # course: list of prerequisites5dep = {} # course: list of dependents6for p in prerequisites:7if p[0] not in pre:8pre[p[0]] = set()9if p[1] not in dep:10dep[p[1]] = set()11pre[p[0]].add(p[1])12dep[p[1]].add(p[0])1314# Kahn's algorithm15l = []16s = set()17for i in range(numCourses):18if i not in dep: # if no dependents (incoming edge)19s.add(i)20while s:21n = s.pop()22l.append(n)23if n in pre: # if n has prerequisites24for m in pre[n]: # for each prerequisites m25dep[m].remove(n) # remove n from m's dependents list26if not dep[m]: # if m has no more dependents27s.add(m)2829return len(l) == numCourses