美文网首页
并查集的应用

并查集的应用

作者: 老杜振熙 | 来源:发表于2020-09-20 20:28 被阅读0次

    并查集作为一种比较容易实现的数据结构,也是有着一些很重要的应用场景,在这里做一点总结并进行理解。


    基础概念

    并查集的核心就是创建一个包含N个整数元素的数组,N为图中所有结点的个数,我们将这个数组命名为father。father[i]代表的就是第i个结点所在的树的根节点下标,初始化时,我们设father[i] = i for i in range(N),代表每个结点单独构成一棵树。在对图所包含的边的遍历过程中,我们逐渐更改father[i],以应对各种各样的问题和需求。虽然各种情况下需求不尽相同,但我们知道,father值相同的结点,其所属的是同一类,即他们是同一颗树下的结点。


    判断是否有环

    关于利用并查集来判断是否有环的问题,比较经典的是leetcode的第685题:冗余连接Ⅱ。

    在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。
    输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。
    结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u 是 v 的一个父节点。
    返回一条能删除的边,使得剩下的图是有N个节点的有根树。若有多个答案,返回最后出现在给定二维数组的答案。
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/redundant-connection-ii

    题目的思路其实就是联系到。具体有两种情况:

    1. 冗余边指向有根树的根节点。此时构成的图必然有一个有向环;
    2. 冗余边指向其他的结点。此时虽然也有环,但并不是有向环。

    剩下的问题,就是如何利用并查集来判断环形结构了。这里,我用图形的形式来进行解释。

    相关文章

      网友评论

          本文标题:并查集的应用

          本文链接:https://www.haomeiwen.com/subject/szppyktx.html