D_L3

Преброяване на области

Jan 25th, 2024
1,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. struct UnionFind{
  9.     vector<int> parents;
  10.     int uniqueAreas;
  11.    
  12.     UnionFind(int n) : parents(n), uniqueAreas(n){
  13.         for(int i = 0; i < n; i++)
  14.             parents[i] = i;
  15.     }
  16.    
  17.     int getParent(int n){
  18.         if(parents[n] == n)
  19.             return n;
  20.         return parents[n] = getParent(parents[n]);
  21.     }
  22.    
  23.     void unite(int a, int b){
  24.         int parentA = getParent(a);
  25.         int parentB = getParent(b);
  26.        
  27.         if(parentA == parentB)
  28.             return;
  29.        
  30.         uniqueAreas--;
  31.         parents[parentA] = parentB;
  32.     }
  33. };
  34.  
  35. int play(){
  36.     int x, y,a,b;
  37.     cin >> x >> y;
  38.     UnionFind uf(x);
  39.    
  40.     for(int i = 0; i < y; i++) {
  41.         cin >>a >> b;
  42.         uf.unite(a, b);
  43.     }
  44.     return uf.uniqueAreas;
  45. }
  46.  
  47. int main() {
  48.     int t;
  49.     cin >> t;
  50.     for(int i = 0; i < t; i++){
  51.         cout << play() << " ";
  52.     }
  53.     return 0;
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment