Beingamanforever

CF 976 Div 2 - D

Sep 29th, 2024
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());
  5. #define NeedForSpeed                  \
  6.     ios_base::sync_with_stdio(false); \
  7.     cin.tie(NULL);                    \
  8.     cout.tie(NULL);
  9. #define int long long
  10. #define all(x) (x).begin(), (x).end()
  11. typedef vector<int> vi;
  12. typedef vector<bool> vb;
  13. typedef vector<vi> vvi;
  14. typedef vector<pair<int, int>> vpi;
  15. #define f first
  16. #define s second
  17. #define endl "\n"
  18. const int mod = 1000000007;
  19. const int MAXN = 200010;
  20. int parent[MAXN], component_size[MAXN];
  21. int components;
  22. int find(int x)
  23. {
  24.     if (parent[x] != x)
  25.     {
  26.         parent[x] = find(parent[x]);
  27.     }
  28.     return parent[x];
  29. }
  30. void unite(int x, int y)
  31. {
  32.     int rootX = find(x);
  33.     int rootY = find(y);
  34.     if (rootX != rootY)
  35.     {
  36.         if (component_size[rootX] < component_size[rootY])
  37.         {
  38.             swap(rootX, rootY);
  39.         }
  40.         parent[rootY] = rootX;
  41.         component_size[rootX] += component_size[rootY];
  42.         components--;
  43.     }
  44. }
  45. void reset(int n)
  46. {
  47.     components = n;
  48.     for (int i = 0; i < n; i++)
  49.     {
  50.         parent[i] = i;
  51.         component_size[i] = 1;
  52.     }
  53. }
  54.  
  55.  
  56. signed main()
  57. {
  58.     NeedForSpeed;
  59.     int t;
  60.     cin >> t;
  61.     while (t--)
  62.     {
  63.         int n, m;
  64.         cin >> n >> m;
  65.         reset(n);
  66.         if (m == 0)
  67.         {
  68.             cout << n << endl;
  69.             return;
  70.         }
  71.         for (int i = 0; i < m; i++)
  72.         {
  73.             int a, d, k;
  74.             cin >> a >> d >> k;
  75.             a -= 1;
  76.             for (int j = 0; j < k; j++)
  77.             {
  78.                 int u = a + j * d;
  79.                 int v = a + (j + 1) * d;
  80.                 if (v >= n)
  81.                 {
  82.                     break;
  83.                 }
  84.                 unite(u, v);
  85.             }
  86.         }
  87.         cout << components << endl;
  88.     }
  89.     return 0;
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment