Menu
CoddyTech

Graph Valid Tree

Даны n узлов, пронумерованных от 0 до n-1, и список edges неориентированных рёбер. Каждая пара [a, b] соединяет узел a с узлом b.

Верните true, если рёбра образуют одно дерево из всех n узлов: из каждого узла можно попасть в любой другой, и циклов нет. В противном случае верните false.

Функция

validTree(n: integer, edges: integer-2d-array) → boolean
ninteger
количество узлов, пронумерованных от 0 до n-1
edgesinteger-2d-array
неориентированные рёбра, каждое из которых представляет собой пару [a, b]
Возвращаетboolean
true, если рёбра соединяют все n узлов в одно дерево, иначе false

Ограничения

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] при этом 0 ≤ a, b ≤ n-1 и a ≠ b
  • Ни одно ребро не встречается дважды ни в одном направлении.

Примеры

Ввод
n = 5edges = [[0, 1], [0, 2], [0, 3], [1, 4]]
Вывод
true
Пояснение
Узел 0 соединён с узлами 1, 2 и 3, а узел 4 ответвляется от узла 1. Четыре ребра соединяют все пять узлов без циклов, поэтому это дерево.
challenge icon

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

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

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

Тест #1

Тест #2

Тест #3

Аргументы

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

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

true