Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python

Es tut mir Leid. Zweite Anmerkung für mich

Das letzte Mal habe ich die Mindestimplementierung von Union-Find geschrieben und jetzt ist UnionFind unübertroffen! ich dachte

ABC157 D-Friend Suggestion

https://atcoder.jp/contests/abc157/tasks/abc157_d

Das Problem von AtCoder hat mich verwirrt.

Die Ursache ist, dass die Implementierung zum Abrufen der Größe (Anzahl der Elemente) nicht durchgeführt wurde. Lassen Sie uns neu implementieren.

Implementierungscode


    N,Q = map(int,input().split())
    par = [-1]*(N+1)
    def find(x):
        if par[x] < 0:
            return x
        else:
            par[x] = find(par[x]) #Pfadkomprimierung
            return par[x]
    def same(x,y):
        return find(x) == find(y)
    def unite(x,y):
        x = find(x)
        y = find(y)
        if x == y:
            return 0
        else:
          if par[x] > par[y]:
            x,y = y,x
            par[x] += par[y]
            par[y] = x
    def size(x):
        return -par[find(x)]

Dies ist die überarbeitete Version.

Initialisieren

    par = [-1]*(N+1)

Es ist zu beachten, dass alle anfänglichen Anfangswerte auf -1 gesetzt und verwaltet werden.

Wenn Sie ein Elternteil sind, werden Sie danach beurteilt, ob Sie negativ sind oder nicht.

Vereinen

    def unite(x,y):
        x = find(x)
        y = find(y)
        if x == y:
            return 0
        else:
          if par[x] > par[y]:
            x,y = y,x
            par[x] += par[y]
            par[y] = x

Ist die negative Summe beider Elternteile beim Beitritt zu nehmen.

Auf diese Weise enthält das untergeordnete Element von par die Nummer des übergeordneten Knotens.

Die Größe (Anzahl der Elemente) des Baums kann im übergeordneten Element von par als negativer Wert angegeben werden.

Beispiel

In diesem Bild ist es beispielsweise [-5, 0, 0, 0, 0].

size

Jetzt ist klar, warum der Rückgabewert der Größenfunktion ein Minus-has hat!

    def size(x):
        return -par[find(x)]

Zusammenfassung

Ich war zuerst überrascht, dass vor der Rückkehr ein Minus erschien, obwohl ich nur die Größe bekam, aber es war sehr leicht zu verstehen, sobald ich es verstanden hatte.

Diesmal sollte Union Find mithalten können!

Recommended Posts

Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
Holen Sie sich den Aufrufer einer Funktion in Python
Holen Sie sich die Anzahl der Ziffern
Holen Sie sich die Terminalgröße in Python
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
[Python] Ermittelt die Anzahl der Aufrufe aller veröffentlichten Artikel
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Holen Sie sich die Anzahl der Ansichten von Qiita
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Holen Sie sich die Anzahl der Youtube-Abonnenten
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Ermitteln Sie die Anzahl der Vorkommen für jedes Element in der Liste
Ruft den Index jedes Elements der Verwirrungsmatrix in Python ab
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Überprüfen Sie das Verhalten des Zerstörers in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
Das Ergebnis der Installation von Python auf Anaconda
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
[Python] Ruft den Zeichencode der Datei ab
Ruft die EDINET-Codeliste in Python ab
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Entfernen Sie DICOM-Bilder in Python
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
[Python] Kombinieren Sie alle Elemente in einem Array
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
[Python] Berechnen Sie die Anzahl der Stellen, die zum Ausfüllen von Nullen erforderlich sind. [Hinweis]
Klicken Sie auf die Selenium-Links, um die Elemente der einzelnen Seiten abzurufen
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Holen Sie sich den Schlüssel für die Migration von JSON-Daten auf der zweiten Ebene mit Python
Holen Sie sich den Inhalt von Git Diff aus Python
[Python] Checklistenelemente alle, alle
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Holen Sie sich das Wetter in Osaka über Web-API (Python)
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Ändern Sie die Schriftgröße der Legende in df.plot
[Python] Ruft die Skalenbezeichnung der Figur ab / bearbeitet sie
[Python] Holen Sie sich die Hauptthemen von Yahoo News
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Umschreiben von Elementen in einer Listenschleife (Python)
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
[Python] Ruft das Datum der letzten Aktualisierung der Website ab