- Gerrard 的博客
并查集模版
- @ 2024-10-4 12:04:46
struct DSU{
std::vector<int> f,siz;
DSU(int n):f(n+1),siz(n+1,1){std::iota(f.begin(),f.end(),0);}
int leader(int x){while(x!=f[x]) x=f[x]=f[f[x]];return x;}
bool same(int x,int y){return leader(x)==leader(y);};
bool merge(int x,int y){x=leader(x);y=leader(y);if(x==y) return false;siz[x]+=siz[y];f[y]=x;return true;}
int size(int x) {return siz[leader(x)];}
};