library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub masayoshi64/library

:heavy_check_mark: UnionFind
(library/structure/UnionFind/UnionFind.cpp)

Required by

Verified with

Code

/**
 * @brief UnionFind
 * @docs docs/UnionFind.md
 */
struct UnionFind {
    vector<int> data;  // sizes of sets

    UnionFind(int sz) : data(sz, -1) {}

    bool unite(int x, int y) {
        x = find(x), y = find(y);
        if (x == y) return false;
        if (data[x] > data[y]) swap(x, y);
        data[x] += data[y];
        data[y] = x;
        return true;
    }

    int find(int k) {
        if (data[k] < 0) return k;
        return data[k] = find(data[k]);
    }

    int size(int k) { return (-data[find(k)]); }

    bool same(int x, int y) { return find(x) == find(y); }
};
#line 1 "library/structure/UnionFind/UnionFind.cpp"

/**
 * @brief UnionFind
 * @docs docs/UnionFind.md
 */
struct UnionFind {
    vector<int> data;  // sizes of sets

    UnionFind(int sz) : data(sz, -1) {}

    bool unite(int x, int y) {
        x = find(x), y = find(y);
        if (x == y) return false;
        if (data[x] > data[y]) swap(x, y);
        data[x] += data[y];
        data[y] = x;
        return true;
    }

    int find(int k) {
        if (data[k] < 0) return k;
        return data[k] = find(data[k]);
    }

    int size(int k) { return (-data[find(k)]); }

    bool same(int x, int y) { return find(x) == find(y); }
};
Back to top page