Cod sursa(job #2505503)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 6 decembrie 2019 22:55:35
Problema Componente tare conexe Scor 30
Compilator py Status done
Runda Arhiva educationala Marime 1.06 kb
def cmp( x ):
    return -x[1]


def dfs( nod ):
    global u
    ultim[nod] = -1
    for i in v[nod]:
        if ultim[i] == 0:
            dfs( i )
    ultim[nod] = u
    u += 1


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


fin = open( "ctc.in" )
s = fin.readline().split()
n = int( s[0] )
v = [ [] for i in range (0, n) ]
v2 = [ [] for i in range (0, n) ]
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()

ultim = [0] * n
u = 1
for i in range( 0, n ):
    if ultim[i] == 0:
        dfs( i )
# print( v )
# print( ultim)
ultim = [ ( i, ultim[i] ) for i in range( 0, n ) ]
ultim.sort( key=cmp )
# print( v2 )
# print( ultim)
co = 0
ctc = [0] * n
for i in ultim:
    if ctc[ i[0] ] == 0:
        co += 1
        ctc_dfs( i[0] )

fout = open( "ctc.out", "w" )
fout.write( str( co ) + '\n' )

for i in range( 1, n + 1 ):
    for j in range( 0, n ):
        if i == ctc[j]:
            fout.write( str( j+1 ) + " ")
    fout.write( '\n' )
fout.close()