首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Union-Find (或不相交集合)数据结构是否在STL中?

Union-Find (或不相交集合)数据结构是否在STL中?
EN

Stack Overflow用户
提问于 2017-04-23 00:34:03
回答 2查看 11.9K关注 0票数 13

我曾期望在C++ Standard Library中包含这样一个有用的数据结构,但我似乎找不到它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-23 00:40:13

它不是,但是在boost中有一个:http://www.boost.org/doc/libs/1_64_0/libs/disjoint_sets/disjoint_sets.html,所以如果你想要一个现成的实现,我推荐这个。

票数 9
EN

Stack Overflow用户

发布于 2021-08-03 10:22:07

不是的。我写了一个简单的实现。它具有很强的可扩展性。

代码语言:javascript
复制
struct DisjointSet {
    vector<int> parent;
    vector<int> size;

    DisjointSet(int maxSize) {
        parent.resize(maxSize);
        size.resize(maxSize);
        for (int i = 0; i < maxSize; i++) {
            parent[i] = i;
            size[i] = 1;
        }
    }

    int find_set(int v) {
        if (v == parent[v])
            return v;
        return parent[v] = find_set(parent[v]);
    }

    void union_set(int a, int b) {
        a = find_set(a);
        b = find_set(b);
        if (a != b) {
            if (size[a] < size[b])
                swap(a, b);
            parent[b] = a;
            size[a] += size[b];
        }
    }
};

其用法如下。

代码语言:javascript
复制
void solve() {
    int n;
    cin >> n;
    DisjointSet S(n);  // Initializing with maximum Size
    S.union_set(1, 2);
    S.union_set(3, 7);
    int parent = S.find_set(1);  // root of 1
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43561722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档