Advertisement
Ritam_C

dsu-2

Sep 28th, 2021
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. typedef long long ll;
  3. typedef unsigned long long ull;
  4. #define tests int t; cin >> t; while(t--)
  5. #define vll vector<ll>
  6. #define vi vector<int>
  7. #define pb push_back
  8. using namespace std;
  9.  
  10. int p[(int)1e5+5], r[(int)1e5+5], mins[(int)1e5+5], maxs[(int)1e5+5];
  11. ll sizes[(int)1e5+5];
  12.  
  13. int get(int u) {
  14.     if(p[u] != u) {
  15.         p[u] = get(p[u]);
  16.     }
  17.     return p[u];
  18. }
  19.  
  20. void Union(int a, int b) {
  21.     a = get(a);
  22.     b = get(b);
  23.     if(a == b) {
  24.         return;
  25.     }
  26.     if(r[a] == r[b]) {
  27.         r[a]++;
  28.     }
  29.     if(r[a] > r[b]) {
  30.         p[b] = a;
  31.         mins[a] = min(mins[a], mins[b]);
  32.         maxs[a] = max(maxs[a], maxs[b]);
  33.         sizes[a] += sizes[b];
  34.     } else {
  35.         p[a] = b;
  36.         mins[b] = min(mins[a], mins[b]);
  37.         maxs[b] = max(maxs[a], maxs[b]);
  38.         sizes[b] += sizes[a];
  39.     }
  40. }
  41.  
  42. int main() {
  43.     ios_base::sync_with_stdio(false);
  44.     cin.tie(NULL); cout.tie(NULL);
  45.     int n, m; cin >> n >> m;
  46.     for(int i = 1; i <= n; i++) {
  47.         sizes[i] = 1; mins[i] = i; maxs[i] = i;
  48.         p[i] = i; r[i] = 0;
  49.     }
  50.     while(m--) {
  51.         string q; cin >> q;
  52.         if(q == "union") {
  53.             int u, v; cin >> u >> v;
  54.             Union(u, v);
  55.         } else {
  56.             int u; cin >> u;
  57.             u = get(u);
  58.             cout << mins[u] << " " << maxs[u] << " " << sizes[u] << "\n";
  59.         }
  60.     }
  61.     return 0;
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement