并查集基础

本文介绍了如何在Python中使用并查集数据结构,包括合并两个集合、判断集合关系以及路径压缩优化查询效率。主要涉及findroot函数、merge函数和query函数的实现细节。
摘要由CSDN通过智能技术生成

合并两个集合:将一个集合作为另一个集合的子树 如:Merge(b,f)表示将f所在的集合作为b所在集合的子树,注意是根节点进行合并才能保证树结构,即让b的根节点a变为f的根节点c的父节点

判断两个集合是否属于同一个集合:判断根节点是否相同

实现代码思路细节:

p[x]表示x的父节点
1.初始化p[x]为x即初始化x为根节点(根节点的父节点为自己)

2.合并集合x,y。找到x的根节点rootx的根节点和rooty的根节点使p[rootx]=rooty把y的根节点变为x的根节点的父节点即完成集合合并

3.查询节点x,y是否为一个集合即查询x与y的根节点是否相同。

4.查找根节点使进行路径压缩使得一个集合的每个子节点都指向祖宗节点(根节点),这样查询根节点时就可以大大降低了时间复杂度。将链式查询变为了树状查询。

import os

import sys

input=sys.stdin.readline

# 请在此输入您的代码

##查找该节点的根节点

##对于根节点p[x]=x

def findroot(x):

    ##p[x]表示x节点的父节点

    ##如果是该节点与父节点相同那么为根节点则返回(递归出口)

    if x==p[x]:

        return x

    ##如果不相同说明该节点不是根节点则把该节点的父节点变为根节点(祖宗节点)

    ##路径压缩

    p[x]=findroot(p[x])

    return p[x]

##合并a,b

def merge(a,b):

    ##合并a,b两个节点直接将一个节点的根结点变为另一个节点的根节点的父节点

    rootx=findroot(x)

    rooty=findroot(y)

    p[rootx]=rooty

    ##把rootx的父节点变为rooty

##判断a,b是否属于同一个集合

def query(a,b):

    ##两个节点的祖宗相同则为同一个集合

    ##不同则不是同一个集合

    return findroot(a)==findroot(b)

n,m=map(int,input().split())

##初始化所有节点全为根节点

p=[i for i in range (n+1)]

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值