//并查集
class UnionFind
{
private:
vector<int> parent;
vector<int> size;
int count;
public:
UnionFind(int n){
count=n;
parent.resize(n);
size.resize(n);
for(int i=0;i<n;i++){
parent[i]=i;
size[i]=1;
}
}
int Find(int x){
while(x!=parent[x]){
parent[x]=parent[parent[x]];
x=parent[x];
}
return x;
}
void Union(int x,int y){
int x_root=Find(x);
int y_root=Find(y);
if(x_root==y_root)
return;
if(size[x_root]>size[y_root]){
parent[y_root]=x_root;
size[x_root]+=size[y_root];
}
else{
parent[x_root]=y_root;
size[y_root]+=size[x_root];
}
count--;
}
bool connected(int x,int y){
int x_root=Find(x);
int y_root=Find(y);
return x_root==y_root;
}
};
并查集
最新推荐文章于 2023-04-28 15:57:42 发布