zoukankan      html  css  js  c++  java
  • 并查集

    当需要判断大量数据是否有联系时,可以使用并查集。

    将所有数据看作一棵棵单独的树

    每个树的根节点都是自己本身

    如果两棵树有联系,我们就可以把其中一棵变成另一棵的叶子

    这样, 只需要一个数组记录每个结点对应的根,只要两个结点的根相同,就说明他们在同一棵树上(有联系)

    因为我们只需要知道根是谁,不需要知道这棵树上还有谁,因此,对于每棵树的叶子都直接连接到根上能够达到最快的访问速度

    在访问的时候我们可以顺便进行一定程度的路径压缩

    初始化时先把所有的uf[i]=i

    连接时 uf[UF(a)] = UF(b); 

    这样就能把两个结点连到一棵树上(将a所在的树连接到b所在树的根上)

    //并查集
    int uf[maxn];
    int UF(int n) {
        int t = uf[n];
        while(t != uf[t])
            t = uf[t];
        return uf[n] = t;
    }
  • 相关阅读:
    hdu1042-N!-(java大数)
    拓扑排序-有向无环图(DAG, Directed Acyclic Graph)
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
  • 原文地址:https://www.cnblogs.com/ohyee/p/5488758.html
Copyright © 2011-2022 走看看