并查集

并查集介绍:

一群小弟拜老大哥。老大哥(根节点)一样帮派一样。

并查集表达:

N个人的话,N长度的数组即可。每个数组元素对应的值是这个人的大哥。

find()操作是,找上一级的大哥。

union()操作是,老大哥拜大哥。

并查集初始化:

每个人先成自己的大哥。

并查集裸题:

并查集_第1张图片

 

 裸题代码:

class Solution {
public:
    int nums[205];
    int findCircleNum(vectorint> >& M) {
        for(int i=0;i<205;i++){
            nums[i]=i;
        }
        for(int i=0;i){
            for(int j=0;j){
                if(M[i][j]==1) Union(i,j);
            }
        }
        int res = 0;
        for(int i=0;i){
            if(i==nums[i]) res++;
        }
        return res;
    }
    int find(int x){
        return nums[x]==x?x:find(nums[x]);
    };
    void Union(int x,int y){
        int a = find(x);
        int b = find(y);
        nums[b]=a;
    }
};

 

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