Cod sursa(job #2505584)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 7 decembrie 2019 01:36:36
Problema Componente tare conexe Scor 60
Compilator py Status done
Runda Arhiva educationala Marime 1.31 kb
def dfs( nod ):
    vizitat[nod] = True
    for i in v[nod]:
        if vizitat[i] == False:
            dfs( i )
    stack.append(nod)


def ctc_dfs(nod):
    ctc[nod] = co
    for i in v2[nod]:
        if ctc[i] == 0:
            ctc_dfs( i )


try:
    from sys import setrecursionlimit

    setrecursionlimit(10000)
    fin = open( "ctc.in" )
    s = fin.readline().split()
    n = int( s[0] )
    v = []
    v2 = []
    vizitat = []
    for i in range( 0, n ):
        v.append([])
        v2.append([])
        vizitat.append( False )
    for i in fin:
        s = [ int(x)-1 for x in i.split() ]
        v[ s[0] ].append( s[1] )
        v2[ s[1] ].append( s[0] )
    fin.close()

    stack = []
    for i in range( 0, n ):
        if vizitat[i] == False:
            dfs( i )

    vizitat.clear()
    v.clear()
    co = 0
    ctc = [0] * n

    while stack:
        u = stack.pop()
        if ctc[ u ] == 0:
            co += 1
            ctc_dfs( u )
    v2.clear()
    fout = open( "ctc.out", "w" )
    fout.write( str( co ) + '\n' )
    afisare = [ [] for i in range( 0, n+1 ) ]
    for i in range( 0, n ):
        afisare[ ctc[i] ].append( i+1 )
    for i in range( 1, n + 1 ):
        for j in afisare[i]:
            fout.write( str(j) + " " )
        fout.write( '\n' )
    fout.close()
except RecursionError as re:
    print( re )