Time Cost
15min1s
Implementation
None
Code
- Solution
class Solution { public: vector<int> parent; vector<int> rank; int find(int i) { if (parent[i] != i) parent[i] = find(parent[i]); return parent[i]; } void join(int i, int j) { int rootI = find(i), rootJ = find(j); if (rootI > rootJ) parent[rootJ] = rootI; else if (rootI < rootJ) parent[rootI] = rootJ; else { parent[rootJ] = rootI; rank[rootI]++; } } int findCircleNum(vector<vector<int>>& isConnected) { parent.resize(isConnected.size()); rank.resize(isConnected.size(), 0); for (int i=0; i<isConnected.size(); i++) parent[i] = i; int result = isConnected.size(); for (int i=0; i<isConnected.size(); i++) { for (int j=i+1; j<isConnected.size(); j++) { if (!isConnected[i][j]) continue; if (find(i) == find(j)) continue; join(i, j); result--; } } return result; } };