Advertisement
Eileanora

Untitled

Mar 23rd, 2023
644
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     struct DSU
  4.     {
  5.         vector <int> sz , parent;
  6.         int n;
  7.         DSU(int n)
  8.         {
  9.             this->n = n;
  10.             sz.resize(n);
  11.             parent.resize(n);
  12.             for(int i = 1; i < n; i++)
  13.             {
  14.                 sz[i] = 1;
  15.                 parent[i] = i;
  16.             }
  17.         }
  18.  
  19.         int find_parent(int u)
  20.         {
  21.             if(u == parent[u])
  22.                 return u;
  23.             return parent[u] = find_parent(parent[u]);
  24.         }
  25.  
  26.         void merge(int u , int v)
  27.         {
  28.             if(sz[u] < sz[v])
  29.                 swap(u , v);
  30.             sz[u] += sz[v];
  31.             parent[v] = u;
  32.         }
  33.  
  34.         bool is_cyclic(int u , int v)
  35.         {
  36.             int x = find_parent(u);
  37.             int y = find_parent(v);
  38.             if(x == y)
  39.             {
  40.                 //parent[v] = v;
  41.                 return true;
  42.             }
  43.             merge(x , y);
  44.             return false;
  45.        
  46.         }
  47.     };
  48.     int makeConnected(int n, vector<vector<int>>& connections) {
  49.         DSU dsu(n + 1);
  50.         int extra = 0;
  51.         for (auto& pc  : connections)
  52.         {
  53.             int u = pc[0] , v = pc[1];
  54.             bool is_cyclic = dsu.is_cyclic(u , v);
  55.             if(is_cyclic)
  56.                 extra++;
  57.         }
  58.         int ans = 0;
  59.         for(int i = 1; i < n; i++)
  60.         {
  61.             if(dsu.parent[i] == i)
  62.                 ans++;
  63.         }
  64.         if(extra >= ans - 1)
  65.             return ans - 1;
  66.         return -1;
  67.     }
  68. };
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement