Menu
CoddyTech

Strongly Connected Components

DifícilGrafospython iconjava iconcpp iconc iconjs icon+10

Un grafo dirigido tiene n nodos, numerados del 0 al n-1, y una lista de edges, donde [from, to] es una arista del nodo from al nodo to.

Un componente fuertemente conexo es el grupo más grande de nodos en el que cada nodo puede llegar a todos los demás siguiendo las aristas. Cada nodo pertenece exactamente a un componente, y un nodo que no está en ningún ciclo forma un componente por sí solo. Devuelve el número de componentes fuertemente conexos.

Función

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
el número de nodos
edgesinteger-2d-array
las aristas dirigidas, cada una como [from, to]
Devuelveinteger
el número de componentes fuertemente conexas

Restricciones

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] con 0 ≤ from, to < n y from ≠ to
  • No aparece ninguna arista dos veces.

Ejemplos

Entrada
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
Salida
3
Explicación
Los nodos 0, 1 y 2 forman un bucle, así que se alcanzan entre sí. Los nodos 3 y 4 apuntan el uno al otro. El nodo 5 llega al 4, pero nada vuelve al 5, así que queda aislado: 3 componentes.
challenge icon

Para ir más allá

¿Cuántas aristas como mínimo tendrías que añadir para que todo el grafo sea un único componente fuertemente conexo?

Restablecer código
def countSCC(n, edges):
    # Escribe el código aquí

Prueba #1

Prueba #2

Argumentos

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

Salida Esperada

3