if we somehow see v again checking w’s adj list then we know there is a cycle
from collections import defaultdict
classSolution:defcanFinish(self, numCourses:int, prerequisites: List[List[int]])->bool:ifnot prerequisites:returnTrue adj = defaultdict(list)for u, v in prerequisites: adj[v].append(u) seen =set() stack =set() has_cycle =Falsedefdfs(v):nonlocal has_cycle
seen.add(v) stack.add(v)for w in adj[v]:if has_cycle:returnif w in stack: has_cycle =Trueelif w notin seen: dfs(w) stack.remove(v)for i inrange(numCourses):if i notin seen: dfs(i)returnnot has_cycle