C++版并查集(精简递归)

用递归的思路写的并查集, 觉得更容易理解, 虽然此处并没有针对每一个小集合的大小进行优化, 算法执行过程当中有可能会导致某一个集合变得很大:

unordered_map<int, int> f;

int find(int x) {
    if (!f.count(x)) f[x] = x;
    if (x != f[x]) f[x] = find(f[x]);
    return f[x];
}

void uni(int x, int y) {
    x = find(x), y = find(y);
    if (x != y) f[x] = y;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注