Cod sursa(job #2503980)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 4 decembrie 2019 02:55:52
Problema Componente tare conexe Scor 30
Compilator py Status done
Runda Arhiva educationala Marime 1.11 kb
def cautare( nod ):
  for i in v[nod]:
    if i not in vecini:
      vecini.add( i )
      cautare( i )


def dfs( nod0, nod ):
    if nod == nod0:
        return 1
    vizitat[nod] = 1
    for i in v[nod]:
        if vizitat[i] == 0:
            nr = dfs( nod0, i )
            if nr == 1:
                return nr


fin = open( "ctc.in", "r" )
s = fin.readline()
s = [ int(x) for x in s.split() ]
n, m = s
v = [ list() for i in range( n ) ]
for i in fin:
    l = [int(x) - 1 for x in i.split()]
    v[l[0]].append(l[1])
fin.close()
componente = [0] * n
nr_comp = 0
vecini = set()
for i in range( 0, n ):
    if componente[i] == 0:
        nr_comp += 1
        componente[i] = nr_comp
        vecini.clear()
        cautare( i )
        for j in vecini:
            vizitat = [0] * n
            if dfs( i, j ) == 1:
                componente[j] = nr_comp


print( nr_comp, componente)
fout = open( "ctc.out", "w" )
fout.write( str( nr_comp ) + '\n' )
for i in range( 1, nr_comp + 1 ):
    for j in range( 0, len(componente) ):
        if componente[j] == i:
            fout.write( str(j+1) + " " )
    fout.write( '\n')
fout.close()