Advertisement
Josif_tepe

Untitled

Mar 27th, 2024
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     vector<int> idx, sz;
  4.     int root(int x) {
  5.         while(x != idx[x]) {
  6.             idx[x] = idx[idx[x]];
  7.             x = idx[x];
  8.         }
  9.         return x;
  10.     }
  11.     void join(int a, int b) {
  12.         int root_a = root(a);
  13.         int root_b = root(b);
  14.         if(root_a != root_b) {
  15.             if(sz[root_a] > sz[root_b]) {
  16.                 idx[root_b] = idx[root_a];
  17.                 sz[root_a] += sz[root_b];
  18.             }
  19.             else {
  20.                 idx[root_a] = idx[root_b];
  21.                 sz[root_b] += sz[root_a];
  22.             }
  23.         }
  24.     }
  25.     int findCircleNum(vector<vector<int>>& isConnected) {
  26.         int n = (int) isConnected.size();
  27.         idx.resize(n);
  28.         sz.resize(n);
  29.        
  30.         for(int i = 0; i < n; i++) {
  31.             sz[i] = 1;
  32.             idx[i] = i;
  33.         }
  34.         for(int i = 0; i < n; i++) {
  35.             for(int j = 0; j < n; j++) {
  36.                 if(isConnected[i][j] == 1) {
  37.                     join(i, j);
  38.                 }
  39.             }
  40.         }
  41.         set<int> st;
  42.         for(int i = 0; i < n; i++) {
  43.             st.insert(root(i));
  44.         }
  45.         return (int) st.size();
  46.        
  47.     }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement