Cod sursa(job #2929662)

Utilizator annesthesyaAnastasia Neagu annesthesya Data 26 octombrie 2022 14:00:39
Problema Componente tare conexe Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.05 kb
import collections

def tarjan(v):
    global k, ctc
    s.append(v)
    index[v] = lowl[v] = k
    k += 1

    for vec in adiac[v]:
        if index[vec] == -1:
            tarjan(vec)
        if vec in s: lowl[v] = min(lowl[v], lowl[vec])

    if lowl[v] == index[v]:
        nod = s.pop(-1)
        while nod != v:
            lowl[nod] = index[v]
            nod = s.pop()
        # ctc += 1

f = open("ctc.in","r")
g = open("ctc.out","w")

n, m = [int(_) for _ in f.readline().split()]

index = [-1 for _ in range(n+1)]
lowl = [-1 for _ in range(n+1)]
adiac=collections.defaultdict(list)

for i in range(m):
    x, y = [int(_) for _ in f.readline().split()]
    adiac[x].append(y)

# ctc = 0
k = 0
s = []

for i in range(n):
    if index[i] == -1:
        tarjan(i)

g.write(str(len(set(lowl)) - 1) + "\n")

for i in range(1, n):
    if lowl[i] == lowl[i + 1]:
        g.write(str(i) + " ")
    else:
        g.write(str(i) + "\n")

if lowl[n] == lowl[n-1]:
    g.write(str(n) + " ")
else:
    g.write(str(n) + "\n")