Menu
CoddyTech

Strongly Connected Components

TrudneGrafypython iconjava iconcpp iconc iconjs icon+10

Graf skierowany ma n węzłów, ponumerowanych od 0 do n-1, oraz listę edges, gdzie [from, to] oznacza krawędź od węzła from do węzła to.

Silnie spójna składowa to największa grupa węzłów, w której każdy węzeł może dotrzeć do każdego innego, podążając wzdłuż krawędzi. Każdy węzeł należy dokładnie do jednej składowej, a węzeł, który nie leży na żadnym cyklu, tworzy składową samodzielnie. Zwróć liczbę silnie spójnych składowych.

Funkcja

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
liczba węzłów
edgesinteger-2d-array
krawędzie skierowane, każda jako [from, to]
Zwracainteger
liczba silnie spójnych składowych

Ograniczenia

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] dla 0 ≤ from, to < n oraz from ≠ to
  • Żadna krawędź nie pojawia się dwa razy.

Przykłady

Wejście
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
Wyjście
3
Wyjaśnienie
Węzły 0, 1 i 2 tworzą pętlę, więc docierają do siebie nawzajem. Węzły 3 i 4 wskazują na siebie nawzajem. Z węzła 5 można dotrzeć do 4, ale nic nie wraca do 5, więc pozostaje on samodzielny: 3 składowe.
challenge icon

Pytanie dodatkowe

Ile krawędzi trzeba dodać, aby cały graf stał się jedną silnie spójną składową?

Zresetuj kod
def countSCC(n, edges):
    # Napisz kod tutaj

Test #1

Test #2

Argumenty

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

Oczekiwany wynik

3