Menu
CoddyTech

Strongly Connected Components

DifficileGrafipython iconjava iconcpp iconc iconjs icon+10

Un grafo orientato ha n nodi, numerati da 0 a n-1, e un elenco di edges, dove [from, to] è un arco dal nodo from al nodo to.

Una componente fortemente connessa è il gruppo più grande di nodi in cui ogni nodo può raggiungere tutti gli altri seguendo gli archi. Ogni nodo appartiene esattamente a una componente, e un nodo che non si trova su alcun ciclo forma una componente a sé. Restituisci il numero di componenti fortemente connesse.

Funzione

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
il numero di nodi
edgesinteger-2d-array
gli archi orientati, ciascuno come [from, to]
Restituisceinteger
il numero di componenti fortemente connesse

Vincoli

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] con 0 ≤ from, to < n e from ≠ to
  • Nessun arco appare due volte.

Esempi

Input
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
Output
3
Spiegazione
I nodi 0, 1 e 2 formano un ciclo, quindi si raggiungono a vicenda. I nodi 3 e 4 puntano l’uno all’altro. Il nodo 5 raggiunge il 4, ma nulla torna al 5, quindi resta isolato: 3 componenti.
challenge icon

Per approfondire

Quanti archi dovresti aggiungere al minimo per rendere l’intero grafo un’unica componente fortemente connessa?

Ripristina il codice
def countSCC(n, edges):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

n = 6
edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]

Output atteso

3