zoukankan      html  css  js  c++  java
  • 并查集 Python实现

     1 # 并查集实现
     2 class Node:
     3     pass
     4 
     5 class UnionFindSet:
     6     def __init__(self, nodes):
     7         self.fatherDict = dict()
     8         self.sizeDict = dict()
     9         for node in nodes:
    10             self.fatherDict[node] = node
    11             self.sizeDict[node] = 1
    12 
    13     # def findHead(self, node):
    14     #     father = self.fatherDict.get(node)
    15     #     if node!=father:
    16     #         father = self.findHead(father)
    17     #     self.fatherDict[node] = father
    18     #     return father
    19 
    20     def findHead(self, node):           # 找到当前节点的头
    21         stack = []                      # 每次查询都会优化,经过的节点会直接指向头结点
    22         father = self.fatherDict[node]
    23         while node != father:
    24             stack.append(node)
    25             node = father
    26             father = self.fatherDict[node]
    27         while len(stack) > 0:
    28             self.fatherDict[stack.pop()] = father
    29         return father
    30 
    31     def isSameSet(self, a, b):
    32         return self.findHead(a) == self.findHead(b)
    33 
    34     def uion(self, a, b):                  # 两集合合并
    35         if a is None or b is None:
    36             return
    37         aHead = self.findHead(a)
    38         bHead = self.findHead(b)
    39         if aHead != bHead:
    40             aSize = self.sizeDict[aHead]
    41             bSize = self.sizeDict[bHead]
    42             if aSize <= bSize:
    43                 self.fatherDict[aHead] = bHead
    44                 self.sizeDict[bHead] = aSize + bSize
    45             else:
    46                 self.fatherDict[bHead] = aHead
    47                 self.sizeDict[aHead] = aSize + bSize
  • 相关阅读:
    拓扑排序
    最小费用最大流模板
    有上下界的网络流问题
    网络流模板
    LIS+LCS+LCIS
    【Vijos】1218 数字游戏
    【Vijos】1792 摆花
    【Vijos】1431 守望者的逃离
    【wikioi】1029 遍历问题
    背包模版
  • 原文地址:https://www.cnblogs.com/icekx/p/9142317.html
Copyright © 2011-2022 走看看