Menu
CoddyTech

Strongly Connected Components

СложноГрафыpython iconjava iconcpp iconc iconjs icon+10

В ориентированном графе есть n узлов, пронумерованных от 0 до n-1, и список edges, где [from, to] — это ребро из узла from в узел to.

Сильно связная компонента — это наибольшая группа узлов, в которой из каждого узла можно попасть в любой другой, следуя по рёбрам. Каждый узел принадлежит ровно одной компоненте, а узел, не входящий ни в один цикл, образует компоненту сам по себе. Верните количество сильно связных компонент.

Функция

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
количество узлов
edgesinteger-2d-array
ориентированные рёбра, каждое в формате [from, to]
Возвращаетinteger
количество сильно связных компонент

Ограничения

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to], где 0 ≤ from, to < n и from ≠ to
  • Ни одно ребро не встречается дважды.

Примеры

Ввод
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
Вывод
3
Пояснение
Узлы 0, 1 и 2 образуют цикл, поэтому каждый из них достижим из остальных. Узлы 3 и 4 указывают друг на друга. Из узла 5 можно достичь узла 4, но обратно к узлу 5 пути нет, поэтому он образует отдельную компоненту: всего 3 компоненты.
challenge icon

Дополнительный вопрос

Сколько минимум рёбер нужно добавить, чтобы весь граф стал одной сильно связной компонентой?

Сбросить код
def countSCC(n, edges):
    # Напишите код здесь

Тест #1

Тест #2

Аргументы

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

Ожидаемый вывод

3