启发式合并并查集
时间上更加优秀的并查集
把小的合并到大的
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
inline void Swap(int &x,int &y)
{
int tmp=x;x=y;y=tmp;
return;
}
void join(int x,int y)
{
int xx=find(x),yy=find(y);
if(xx==yy) return;
if(size[xx]>size[yy])
Swap(xx,yy);
fa[xx]=yy;
size[yy]+=size[xx];
return;
}