并查集

1.普通并查集

功能:
1.(union or Merge)合并两个节点所在的集合
2. (find)查找某个节点所在集合的祖先
3.(connected or Query)判断两个节点是否属于同一个集合

 int[] fa;
    int[] size;
    int count;
    int find(int p) {
        if(fa[p] != p)fa[p] = find(fa[p]);
        return fa[p];
    }

    void union(int p, int q) {
        int fp = find(p);
        int fq = find(q);
        if(size[fp] < size[fq]) {
            fa[fp] = fq;
            size[fq] += size[fp];
        } else {
            fa[fq] = fp;
            size[fp] += size[fq];
        }
        count--;
    }

    boolean connected(int p, int q) {
        return find(p) == find(q);
    }

2.加权并查集

Posted on 2022-11-15 10:26  Nonur  阅读(17)  评论(0编辑  收藏  举报