1494. Parallel Courses II Solution 1 class Solution: def minNumberOfSemesters(self, n: int, relations: List[List[int]], k: int) -> int: d = [0] * (n + 1) for x, y in relations: d[y] |= 1 << x q = deque([(0, 0)]) vis = {0} while q: cur, t = q.popleft() if cur == (1 << (n + 1)) - 2: return t nxt = 0 for i in range(1, n + 1): if (cur & d[i]) == d[i]: nxt |= 1 << i nxt ^= cur if bin(nxt).count("1") <= k: if (nxt | cur) not in vis: vis.add(nxt | cur) q.append((nxt | cur, t + 1)) else: x = nxt while nxt: if bin(nxt).count("1") == k and (nxt | cur) not in vis: vis.add(nxt | cur) q.append((nxt | cur, t + 1)) nxt = (nxt - 1) & x