Menu
CoddyTech

Redundant Connection

ŚrednieUnion-findGrafypython iconjava iconcpp iconc iconjs icon+10

Sieć początkowo miała postać drzewa: n węzłów, ponumerowanych od 1 do n, połączonych n-1 nieskierowanymi krawędziami bez cykli. Następnie dodano jeszcze jedną krawędź między dwoma węzłami, które nie były bezpośrednio połączone, więc lista edges zawiera teraz n krawędzi i dokładnie jeden cykl.

Zwróć krawędź, którą możesz usunąć, aby pozostałe n-1 krawędzi ponownie utworzyły drzewo. Jeśli pasuje kilka krawędzi, zwróć tę, która występuje najpóźniej w edges, jako parę [a, b] dokładnie w takiej postaci, w jakiej została tam zapisana.

Funkcja

findRedundantConnection(edges: integer-2d-array) → integer-array
edgesinteger-2d-array
n nieskierowanych krawędzi, z których każda jest parą [a, b] węzłów ponumerowanych od 1
Zwracainteger-array
krawędź cyklu, która pojawia się jako ostatnia w edges, zapisana tak, jak tam występuje

Ograniczenia

  • 3 ≤ n ≤ 5000, gdzie n = edges.length
  • edges[i] = [a, b], gdzie 1 ≤ a, b ≤ n oraz a ≠ b
  • Żadna krawędź nie występuje dwukrotnie, w żadnym kierunku.
  • Krawędzie łączą wszystkie n węzłów i tworzą dokładnie jeden cykl.

Przykłady

Wejście
edges = [[1, 2], [1, 3], [2, 3]]
Wyjście
[2, 3]
Wyjaśnienie
Trzy krawędzie tworzą trójkąt 1, 2, 3, więc usunięcie dowolnej z nich pozostawia drzewo. [2, 3] znajduje się na końcu listy.
challenge icon

Pytanie dodatkowe

Jeśli krawędzie byłyby skierowane, a pierwotny graf byłby drzewem ukorzenionym, którą krawędź usunąłbyś, gdy dodatkowa krawędź sprawia, że węzeł ma dwóch rodziców?

Zresetuj kod
def findRedundantConnection(edges):
    # Wpisz kod tutaj

Test #1

Test #2

Argument

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

Oczekiwany wynik

[2, 3]