Menu
CoddyTech

Graph Valid Tree

ŚrednieUnion-findGrafypython iconjava iconcpp iconc iconjs icon+10

Otrzymujesz n węzłów ponumerowanych od 0 do n-1 oraz listę edges zawierającą nieskierowane krawędzie. Każda para [a, b] łączy węzeł a z węzłem b.

Zwróć true, jeśli krawędzie tworzą jedno drzewo obejmujące wszystkie n węzłów: każdy węzeł może dotrzeć do każdego innego i nie ma żadnego cyklu. W przeciwnym razie zwróć false.

Funkcja

validTree(n: integer, edges: integer-2d-array) → boolean
ninteger
liczba węzłów, ponumerowanych od 0 do n-1
edgesinteger-2d-array
nieskierowane krawędzie, każda w postaci pary [a, b]
Zwracaboolean
true, jeśli krawędzie łączą wszystkie n węzłów w jedno drzewo, w przeciwnym razie false

Ograniczenia

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b], gdzie 0 ≤ a, b ≤ n-1 i a ≠ b
  • Żadna krawędź nie występuje dwukrotnie, w żadnym kierunku.

Przykłady

Wejście
n = 5edges = [[0, 1], [0, 2], [0, 3], [1, 4]]
Wyjście
true
Wyjaśnienie
Węzeł 0 łączy się z węzłami 1, 2 i 3, a węzeł 4 odchodzi od węzła 1. Cztery krawędzie łączą wszystkie pięć węzłów i nie tworzą żadnej pętli, więc jest to drzewo.
challenge icon

Pytanie dodatkowe

Jeśli graf nie jest drzewem, ile krawędzi trzeba usunąć i ile dodać, aby stał się drzewem? Czy potrafisz policzyć obie liczby w jednym przebiegu?

Zresetuj kod
def validTree(n, edges):
    # Wpisz tutaj kod

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

true