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()
相关推荐
清风一徐9 小时前
禅道从18.3升级到21.7.6版本
笔记
Jack___Xue9 小时前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix
YoungHong19929 小时前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
零度@10 小时前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
im_AMBER10 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
其美杰布-富贵-李11 小时前
HDF5文件学习笔记
数据结构·笔记·学习
LYFlied11 小时前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
d111111111d12 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
静小谢12 小时前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
ask_baidu13 小时前
Doris笔记
android·笔记