class Solution:
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
adj = [[] for _ in range(n)]
for u, v in edges:
adj[u].append(v)
res = set(range(n))
visited = [False] * n
def dfs(node):
visited[node] = True
for nei in adj[node]:
if not visited[nei]:
dfs(nei)
res.discard(nei)
for i in range(n):
if not visited[i]:
dfs(i)
return list(res)Where is the number of vertices and is the number of edges.
class Solution:
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
adj = [[] for _ in range(n)]
for u, v in edges:
adj[u].append(v)
res = [True] * n
visited = [False] * n
stack = []
for i in range(n):
if not visited[i]:
stack.append(i)
while stack:
node = stack.pop()
if visited[node]:
continue
visited[node] = True
for nei in adj[node]:
if not visited[nei]:
stack.append(nei)
res[nei] = False
return [i for i in range(n) if res[i]]Where is the number of vertices and is the number of edges.
class Solution:
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
incoming = collections.defaultdict(list)
for src, dst in edges:
incoming[dst].append(src)
res = []
for i in range(n):
if not incoming[i]:
res.append(i)
return resWhere is the number of vertices and is the number of edges.
class Solution:
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
indegree = [False] * n
for src, dst in edges:
indegree[dst] = True
return [i for i in range(n) if not indegree[i]]Where is the number of vertices and is the number of edges.