并查集

记录
21:04 2024-2-3

1.并查集

用来快速元素是否属于同一组的数据结构
利用路径压缩和按秩合并防止结构退化

点击查看代码
#define MAX_N 10000
int par[MAX_N];
int rank[MAX_N];

void init(int n) {
    for(int i = 0; i < n; i++) {
        par[i] = i;
        rank[i] = 0;
    }
}

int find(int x) {
    if(par[x] == x) {
        return x;
    } else {
        return par[x] = find(par[x]);
    }
}

void unite(int x, int y) {
    x = find(x);
    y = find(y);

    if(x == y) return;

    if(rank[x] < rank[y]) {
        par[x] = y;
    } else {
        par[y] = x;
        if(rank[x] == rank[y]) rank[x]++;
    }
}

bool same(int x, int y) {
    return find(x) == find(y);
}

题目记录

posted @ 2024-02-04 15:47  57one  阅读(7)  评论(0编辑  收藏  举报