①基础并查集算法

#define MAX 100005
int p[MAX];
int find(int r)
{
    if(p[r]!=r)
        p[r]=find(p[r]);
    return p[r];
}
void join(int x,int y)
{
    int fx=find(x),fy=find(y);
    if(fx!=fy)p[fx]=fy;
}
void init()
{
    for(int i=1;i<=MAX;i++)
        p[i]=i;
}

 


②并查集加秩数组算法(计算每个家族里的总人数)

#define MAX 100005
int p[MAX],rank[MAX]; 
int find(int r)
{
    if(p[r]!=r)
        p[r]=find(p[r]);
    return p[r];
}
void join(int x,int y)
{
    int fx=find(x),fy=find(y);
    if(fx!=fy)
    {
        p[fx]=fy;
        rank[fy]+=rank[fx];
        rank[fx]=0;
    }
}
void init()
{
    for(int i=1;i<=MAX;i++)
        p[i]=i;
}

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!