Todos los desafíos
Difícil 0 resueltos 0% de aceptación

Componentes Fuertemente Conexas

Cuenta los grupos de nodos donde todos pueden alcanzarse mutuamente.

En un grafo dirigido con nodos 0..n−1, una componente fuertemente conexa es un grupo maximal de nodos donde cada nodo puede alcanzar a cualquier otro. Cuenta las componentes (puedes usar el algoritmo de Kosaraju o Tarjan).

Implementa count_scc(n, edges).

Entrada

n: El número de nodos. edges: Aristas dirigidas como [from, to].

Salida

Devuelve el número de componentes.

Restricciones

1 ≤ n ≤ 100,000; 0 ≤ edges ≤ 200,000

Ejemplos

Ejemplo 1
Entrada:
n = 5
edges = [
    [0, 1],
    [1, 2],
    [2, 0],
    [3, 4]
]

Salida esperada:
expected = 3
Entrada:
long long n = 5;
std::vector<std::vector<long long>> edges = {
    {0, 1},
    {1, 2},
    {2, 0},
    {3, 4}
};

Salida esperada:
long long expected = 3;
Entrada:
long n = 5;
long[][] edges = new long[][] {
    new long[] {0, 1},
    new long[] {1, 2},
    new long[] {2, 0},
    new long[] {3, 4}
};

Salida esperada:
long expected = 3;

Explicación

0, 1, 2 forman un ciclo (una componente); 3 y 4 no pueden alcanzarse entre sí, así que son separadas: 3.

Ejemplo 2
Entrada:
n = 3
edges = [
    [0, 1],
    [1, 0],
    [1, 2],
    [2, 1]
]

Salida esperada:
expected = 1
Entrada:
long long n = 3;
std::vector<std::vector<long long>> edges = {
    {0, 1},
    {1, 0},
    {1, 2},
    {2, 1}
};

Salida esperada:
long long expected = 1;
Entrada:
long n = 3;
long[][] edges = new long[][] {
    new long[] {0, 1},
    new long[] {1, 0},
    new long[] {1, 2},
    new long[] {2, 1}
};

Salida esperada:
long expected = 1;

Explicación

Los tres nodos pueden alcanzarse mutuamente: 1.

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.