Pagini recente » Cod sursa (job #2860224) | Cod sursa (job #135872) | Cod sursa (job #2328142) | Cod sursa (job #1781699) | Cod sursa (job #2505584)
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 )