并查集学习笔记

merge过程:
void merge(int x,int y)
{
    int f1=find(x),f2=find(y);
    if (f1!=f2)
      father[f1]=f2;
}
带“路径压缩”的非递归find函数:
int find(int i)
{
    int j,k;
    j=i;
   while (j!=f[j])
       j=f[j];
   while (i!=f[i])
       {
          k=i;
         i=f[i];
         f[k]=j;
       }
  return i;
}
带“路径压缩”的递归find函数:
int find(int i)
{
    if (f[i]=i)
     return i;
    f[i]=find(f[i]);
    return f[i];
}

你可能感兴趣的:(并查集)