#define _for(i,a,b) for(int i = (a);i < (b);i ++)
const int maxn = 50003;
int par[maxn]; //父亲 
int high[maxn]; //树的高度

void init(int n)
{
    _for(i,0,n)
    {
        par[i] = i;
        high[i] = 0;
    }
} 

int find(int x)
{
    return par[x] == x ? x : par[x] = find(par[x]);
}

void unite(int x,int y)
{
    x = find(x);y = find(y);
    if(x==y) return ;
    
    if(high[x]<high[y])
        par[x] = y;
    else
    {
        par[y] = x;
        if(high[x]==high[y])
            high[x] ++;
    }
}

bool same(int x,int y)
{
    return find(x) == find(y); 
}
路径压缩普通并查集

相关文章:

  • 2022-01-06
  • 2021-11-13
  • 2021-06-04
  • 2021-11-09
猜你喜欢
  • 2022-12-23
  • 2021-11-01
  • 2021-10-10
  • 2022-02-12
  • 2022-01-02
相关资源
相似解决方案