Obtenir la taille (nombre d'éléments) de Union Find en Python

Je suis désolé. Deuxième note pour moi

La dernière fois que j'ai écrit l'implémentation minimale d'Union-Find, UnionFind est maintenant sans égal! j'ai pensé

ABC157 D-Friend Suggestion

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

Le problème d'AtCoder m'a rendu confus.

La cause est que nous n'avons pas pu implémenter la taille (nombre d'éléments). Réimplémentons.

Code d'implémentation


    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]) #Compression de chemin
            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)]

Ceci est la version révisée.

Initialisation

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

Il est à noter que toutes les valeurs initiales initiales sont mises à -1 et gérées.

Si vous êtes parent, vous êtes jugé selon que vous êtes négatif ou non.

Unir

    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

Est de prendre la somme négative des deux parents lors de l'adhésion.

Ce faisant, l'élément enfant de par contiendra le numéro du nœud parent.

La taille (nombre d'éléments) de l'arbre peut être considérée comme une valeur négative dans l'élément parent du par.

Exemple

Par exemple, dans cette image, ce sera [-5, 0, 0, 0, 0].

size

Maintenant, il est clair pourquoi la valeur de retour de la fonction de taille a un moins «ー»!

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

Résumé

J'ai été surpris au début qu'un moins apparaisse avant le retour même si je n'avais que la taille, mais c'était très facile à comprendre une fois que je l'ai compris.

Cette fois, Union Find devrait pouvoir correspondre!

Recommended Posts

Obtenir la taille (nombre d'éléments) de Union Find en Python
Obtenez le nombre d'éléments spécifiques dans la liste python
Comment obtenir le nombre de chiffres en Python
[Python] Réduisons le nombre d'éléments dans le résultat dans le fonctionnement de l'ensemble
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Sortie du nombre de cœurs de processeur en Python
Récupérer l'appelant d'une fonction en Python
Obtenez le nombre de chiffres
Obtenir la taille du terminal en Python
[Python] Affiche toutes les combinaisons d'éléments de la liste
[Python] Obtenez le nombre de vues de tous les articles publiés
Obtenez l'URL de la destination de la redirection HTTP en Python
Obtenez le nombre de vues de Qiita
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Obtenez le nombre d'abonnés Youtube
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Python --Trouvez le nombre de groupes dans l'expression regex
[Homologie] Comptez le nombre de trous dans les données avec Python
Obtenez le nombre d'occurrences pour chaque élément de la liste
Obtenez l'index de chaque élément de la matrice de confusion en Python
Comptez bien le nombre de caractères thaïlandais et arabes en Python
Vérifiez le comportement du destroyer en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Le résultat de l'installation de python sur Anaconda
[python] Obtenez le rang des valeurs dans la liste par ordre croissant / décroissant
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
[Python] Récupère le code de caractère du fichier
Obtenir la liste de codes EDINET en Python
Projet Euler # 17 "Nombre de caractères" en Python
Débarrassez-vous des images DICOM en Python
Obtenez le titre et la date de livraison de Yahoo! News en Python
[Python] Combine tous les éléments dans un tableau
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
[Python] Calculez le nombre de chiffres requis lors de la saisie de 0 [Note]
Cliquez sur les liens Selenium afin d'obtenir les éléments des pages individuelles
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
Obtenez une instance datetime à tout moment de la journée en Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
Récupérer le contenu de git diff depuis python
[python] Vérifier les éléments de la liste tous, tous
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Changer la taille de police de la légende dans df.plot
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
[Python] Obtenez les principaux sujets de Yahoo News
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Calculez le nombre total de combinaisons avec python
Copiez la liste en Python
Trouvez le nombre de jours dans un mois
Réécrire des éléments dans une boucle de listes (Python)
Découvrez la fraction de la valeur saisie en python
[Python] Obtenez la dernière date de mise à jour du site Web