个人技术分享

leecode 547 并查集

在这里插入图片描述

class Solution {
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        ini();
        int len = isConnected.size();
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++)
            if(isConnected[i][j]){
                unio(i,j);
            }
        }
        int ans = 0;
        for(int i=0;i<len;i++){
            if(fa[i]==i) ans++;
        }
        return ans;
    }

    void ini(){
        for(int i=0;i<=200;i++){
            fa[i] = i;
        }
    }

    int find(int x){
        if(x==fa[x]) return x;
        fa[x] = find(fa[x]);
        return fa[x];
    }

    void unio(int x,int y){
        int xx = find(x),yy=find(y);
        if(xx==yy) return;
        fa[xx] = yy;
    }

    int fa[205];
};