[模板] Disjoint Set

這幾天一直用到disjoint set,而且正好要寫考幹題的蓋捷運那一題,反正DSU也不難刻,所以就決定真正開始準備自己的模板庫了,以下為以前參考了OTOTOT的程式碼後才寫出來的。
class DSU{
    private:
        vector<int> fa,sz;
    public:
        void init(int n)
        {
            fa.resize(n+1), sz.resize(n+1,1);
            iota(fa.begin(),fa.end(),0);
        }
        int find(int x)
        {
            return (x==fa[x])?x:fa[x]=find(fa[x]);
        }
        bool same(int x,int y)
        {
            return find(x)==find(y);
        }
        void unite(int x,int y)
        {
            if(same(x,y)) return;
            if(sz[find(x)] < sz[find(y)]) swap(x,y);
            fa[find(y)] = find(x);
            sz[find(x)] += sz[find(y)];
        }
};

留言

這個網誌中的熱門文章

Shellshock.io從入門到上手(針對單狙)(沒有圖片、影片版本)

[TIOJ] 1007燈泡問題