PAT:并查集模板

Posted 花落,莫相离

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT:并查集模板相关的知识,希望对你有一定的参考价值。

const int maxn = 1000;

int father[maxn];

void init(){//初始化父亲数组
    for(int i = 0; i < n; i++){
        father[i] = i;
    }
}

int findFather(int a){//查
    int x = a;
    while(a != father[a])   a = father[a];
    while(x != a){//路径压缩
        int tmp = father[x];
        father[x] = a;
        x = tmp;
    }
    return a;
}

void Union(int a, int b){//并
    int fa = findFather(a);
    int fb = findFather(b);
    if(fa != fb){//若是题目有要求说序号小的或大的当祖先,那么此处可以灵活修改
        fa = father[fb];
    }
}

常用技巧:

一般会开一个is_root数组来统计并查集的个数。也即遍历所有给定结点,找到其祖先,并散列到is_root中,若不让统计个数,则直接置一,否则自增即可。特别的,若要求输出每一个并查集的所有成员,则单独开辟一个member向量数组(vector<node> member[maxn]),并以散列的方式来存储成员信息。

以上是关于PAT:并查集模板的主要内容,如果未能解决你的问题,请参考以下文章

PAT甲题题解-1114. Family Property (25)-(并查集模板题)

PAT A1107——并查集

PAT 1114 Family Property[并查集][难]

PAT Advanced 1107 Social Clusters (30) [并查集]

pat 1013 Battle Over Cities(25 分) (并查集)

PAT甲级——1118 Birds in Forest (并查集)