力扣,990. 等式方程的可满足性,并查集

  1. 等式方程的可满足性
    https://leetcode-cn.com/problems/satisfiability-of-equality-equations/
    在这里插入图片描述
    标准的并查集模板,将常用的parent数组形式换成字典形式。
####如果我们将所有等式两端,用并查集合并一波,那么只需要查找下,不等式的两端有没有在一个等式的集合里出现过就行了。
####整个代码由,find_root,union_xy,find_xy组成,find_root查找每个点的的根,union_xy是合并操作,find_xy用于在将等式合并完成后,查找不等式两边是否在某个等式的集合中同时出现。
def equationsPossible(self, equations: List[str]) -> bool:
     equ = []
     nequ = []
     parent = dict()
     rankx = dict()
     for d in equations:
         x,y = d[0],d[-1]
         parent[x] = '-1'
         parent[y] = '-1'
         rankx[x] = 0
         rankx[y] = 0
         if d[1] == '=':
             equ.append((x,y))
         else:
             nequ.append((x,y))   ####前面讲等式和不等式分开放在equ和nequ中。
     def find_root(x,parent):
         while parent[x] != '-1':
             x = parent[x]
         return x
     def union(x,y,parent,rankx):
         x = find_root(x,parent)
         y = find_root(y,parent)
         if x != y:                
             if rankx[x]>rankx[y]:
                 parent[y] = x
                 rankx[y] += 1
             elif rankx[x]>rankx[y]:
                 parent[x] = y
                 rankx[x] += 1
             else:
                 parent[x] = y
                 rankx[x] += 1
             
     def find_xy(x,y,parent):
         x = find_root(x,parent)
         y = find_root(y,parent)
         if x == y:
             return False
         else:
             return True
     for d in equ:  ####将等式合并
         x,y = d[0],d[1]
         union(x,y,parent,rankx)
     for d in nequ: ##看看不等式两端有没有在一个等式的集合中出现过?
         x,y = d[0],d[1]
         if not find_xy(x,y,parent):
             return False        
     return True
        
            


        

猜你喜欢

转载自blog.csdn.net/qq_42232193/article/details/106878240