并查集模板

来源:互联网 发布:阿里云机房测速 编辑:程序博客网 时间:2024/05/01 02:45
void init(int n)       //初始化数组{    for(int i=1;i<=n;i++)        f[i]=i;     //f数组记录每个数的父亲,初始化每个数的父亲为它本身}int find(int x)     //用于查找x的父亲{    return f[x]==x?x:find(f[x]);       //如果x的父亲是它本身,则直接返回x                                    //如果不是它本身,就找它父亲的父亲}void bing(int a,int b)  //用于将a、b两数合并到一个集合{   int t1=find(a);     //t1为a的父亲   int t2=find(b);     //t2为b的父亲   if(t1!=t2)          //如果两个数的父亲不同,说明两个数属于不同的集合        f[t2]=t1;       //则将t2的父亲变为t1,此时a的父亲为t1,b的父亲也为t1,a,b属于同一个集合}


最后只需找f[i]!=i的个数即为集合个数
                                             
0 0
原创粉丝点击