reachable = [] for i in range(n): reachable.append([False] * n) for u in range(n): reachable[u][u] = True for v in topological_sort(u): reachable[u][v] = True for u in range(n): for v in range(n): if not reachable[u][v] and not reachable[v][u]: return False return True