Leetcode 刷题笔记 图论part05

卡码网 107 寻找存在的路径

初识并查集

并查集功能:

  1. 寻找根节点,函数: find(int u),也就是判断这个节点的祖先节点是哪个
  2. 将两个节点接入到同一个集合,函数: join(int u, int v),将两个节点连在同一个根节点上
  3. 判断两个节点是否在同一个集合,函数: isSame(int u, int v),就是判断两个节点是不是同一个根节点
python 复制代码
class UnionFind:
    def __init__(self, size):
        self.parent = list(range(size + 1))
    
    def find(self, u):
        if self.parent[u] != u:
            self.parent[u] = self.find(self.parent[u])
        return self.parent[u]
    def union(self, u, v):
        root_u = self.find(u)
        root_v = self.find(v)
        if root_u != root_v:
            self.parent[root_v] = root_u
    def is_same(self, u, v):
        return self.find(u) == self.find(v)

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    index = 0
    n = int(data[index])
    index += 1
    m = int(data[index])
    index += 1
    uf = UnionFind(n)
    for _ in range(m):
        s = int(data[index])
        index += 1
        t = int(data[index])
        index += 1
        uf.union(s, t)
    source = int(data[index])
    index += 1
    destination = int(data[index])
    if uf.is_same(source, destination):
        print(1)
    else:
        print(0)

if __name__ == '__main__':
    main()
相关推荐
一匹电信狗3 小时前
【LeetCode_547_990】并查集的应用——省份数量 + 等式方程的可满足性
c++·算法·leetcode·职场和发展·stl
鱼跃鹰飞3 小时前
Leetcode会员尊享100题:270.最接近的二叉树值
数据结构·算法·leetcode
三水不滴4 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [drivers][i2c]i2c-dev
linux·笔记·学习
土拨鼠烧电路5 小时前
笔记03:业务语言速成:“人、货、场”模型与IT系统全景图
笔记
We་ct5 小时前
LeetCode 205. 同构字符串:解题思路+代码优化全解析
前端·算法·leetcode·typescript
2301_812731416 小时前
CSS3笔记
前端·笔记·css3
小乔的编程内容分享站7 小时前
记录使用VSCode调试含scanf()的C语言程序出现的两个问题
c语言·开发语言·笔记·vscode
中屹指纹浏览器8 小时前
2026年指纹浏览器技术迭代与风控对抗演进
经验分享·笔记
蒟蒻的贤8 小时前
leetcode链表
算法·leetcode·链表