class Union{
public:
vector<int>pa; //根节点
vector<int>size; //每个点,当它是root时的连通块的size
int count; //连通分量个数
Union(int n){
pa.resize(n);
size.resize(n);
count=n;
for(int i=0;i<n;i++){
pa[i]=i;
size[i]=1;
}
}
int find(int x){ //查找p
if(pa[x]!=x)pa[x]=find(pa[x]);
return pa[x];
}
void Unit(int x,int y){ //连接x,y
int px=find(x);
int py=find(y);
if(px==py)return;
if(size[px]<size[py]){pa[px]=py;size[py]+=size[px];}
else {pa[py]=px;size[px]+=size[py];}
count--;
}
int maxSize(){ //最大连通块
for(int i=0;i<n;i++){
if(pa[i]=i)m=max(m,size[i]);
}
return m;
}
};
Day1:C++并查集板zi
于 2023-11-30 17:15:21 首次发布