from typing import List
def DFS(nod: int, lista_adiacenta: List[List[int]], vizitate: List[int], stiva: List[int]) -> None:
vizitate[nod] = 1
for item in lista_adiacenta[nod]:
if not vizitate[item]:
DFS(item, lista_adiacenta, vizitate, stiva)
stiva.append(nod)
def componenteTareConexe(nr_noduri: int, arce: List[List[int]]) -> List[List[int]]:
vizitate = [0 for _ in range(nr_noduri + 1)]
lista_adiacenta = [[] for _ in range(nr_noduri + 1)]
lista_adiacenta_Tr = [[] for _ in range(nr_noduri + 1)]
for arc in arce:
lista_adiacenta[arc[0]].append(arc[1])
lista_adiacenta_Tr[arc[1]].append(arc[0])
stiva = []
for nod in range(1, nr_noduri + 1):
if not vizitate[nod]:
DFS(nod, lista_adiacenta, vizitate, stiva)
vizitate = [0 for _ in range(nr_noduri + 1)]
rezultat = []
while len(stiva) > 0:
nod = stiva.pop()
if not vizitate[nod]:
componenta = []
DFS(nod, lista_adiacenta_Tr, vizitate, componenta)
rezultat.append(componenta)
return rezultat
print(componenteTareConexe(8,([1,2], [2,6],[6,7],[7,6],[3,1],[3,4],[2,3],[4,5],[5,4],[6,5],[5,8],[8,7])))