####如果我们将所有等式两端,用并查集合并一波,那么只需要查找下,不等式的两端有没有在一个等式的集合里出现过就行了。####整个代码由,find_root,union_xy,find_xy组成,find_root查找每个点的的根,union_xy是合并操作,find_xy用于在将等式合并完成后,查找不等式两边是否在某个等式的集合中同时出现。defequationsPossible(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]=0if d[1]=='=':
equ.append((x,y))else:
nequ.append((x,y))####前面讲等式和不等式分开放在equ和nequ中。deffind_root(x,parent):while parent[x]!='-1':
x = parent[x]return x
defunion(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]+=1elif rankx[x]>rankx[y]:
parent[x]= y
rankx[x]+=1else:
parent[x]= y
rankx[x]+=1deffind_xy(x,y,parent):
x = find_root(x,parent)
y = find_root(y,parent)if x == y:returnFalseelse:returnTruefor d in equ:####将等式合并
x,y = d[0],d[1]
union(x,y,parent,rankx)for d in nequ:##看看不等式两端有没有在一个等式的集合中出现过?
x,y = d[0],d[1]ifnot find_xy(x,y,parent):returnFalsereturnTrue