class Solution {
public:
int findCircleNum(vector<vector<int>>& isConnected) {
int len = isConnected.size();
vector<int> H(len, 0);
for(int i = 0; i < len; i++){H[i] = i;}
for(int i = 0; i < len; i++){
for(int j = i; j < len; j++){
if(isConnected[i][j] == 1)
unionn(H, i, j);
}
}
int ans = 0;
for(int i = 0; i < len; i++){
if(H[i] == i) ans++;
}
return ans;
}
int find(vector<int>&H, int i){
return H[i] == i? H[i]: H[i] = find(H, H[i]);
}
void unionn(vector<int>&H, int i, int j){
// if(find(H, i) != find(H, j)){ H[H[i]] = H[j];}
H[find(H, i)] = find(H, j);
}
};