python 并查集的应用例题

在这里插入图片描述
思路就是把相等的字母连通起来,再判断不等号是否会打破这个连通

def find_root(x):
    while parent[x]!=x:
        parent[x]=parent[parent[x]]##路径压缩,不要也可以
        x=parent[x]
    return x
def union(x,y):
    x_root=find_root(x)
    y_root=find_root(y)
    if size[x_root]>size[y_root]:
        parent[y_root]=x_root
    elif size[y_root]<size[x_root]:
        parent[x_root]=y_root
    else:
        parent[x_root]=y_root
def check_connect(x,y):
    x_root=find_root(x)
    y_root=find_root(y)
    if x_root==y_root:
        return 1
    else:
        return 0
parent=dict()
size=dict()
flag=0
for i in range(26):
    m=chr(ord('a')+i)
    parent[m]=m
    size[m]=0
equations=['a==b','b==c','c==a','b==d','d==a']
for item in equations:
    if item[1]=='=':
        union(item[0],item[3])
for item in equations:
    if item[1]=='!':
        if check_connect(item[0],item[3]):
            flag=1
            print("False")
            break
if flag==0:
    print("True")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值