Menu
CoddyTech

Redundant Connection

Сеть изначально была деревом: n узлов, пронумерованных от 1 до n, соединённых n-1 неориентированными рёбрами без циклов. Затем добавили ещё одно ребро между двумя узлами, которые не были соединены напрямую, поэтому теперь список edges содержит n рёбер и ровно один цикл.

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

Функция

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

Ограничения

  • 3 ≤ n ≤ 5000, где n = edges.length
  • edges[i] = [a, b], где 1 ≤ a, b ≤ n и a ≠ b
  • Ни одно ребро не встречается дважды ни в одном из направлений.
  • Рёбра соединяют все n узлов и образуют ровно один цикл.

Примеры

Ввод
edges = [[1, 2], [1, 3], [2, 3]]
Вывод
[2, 3]
Пояснение
Три ребра образуют треугольник 1, 2, 3, поэтому удаление любого из них оставляет дерево. [2, 3] стоит последним в списке.
challenge icon

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

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

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

Тест #1

Тест #2

Аргумент

edges = [[1, 2], [1, 3], [2, 3]]

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

[2, 3]