Advertisement
Abrar_Al_Samit

Rollback DSU

Mar 22nd, 2023
570
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.51 KB | None | 0 0
  1. struct ROLLBACK_DSU {
  2.     vector<int>par, sz;
  3.     vector<pair<int,int>>op;
  4.  
  5.     ROLLBACK_DSU(int n) : par(n+1), sz(n+1, 1) {
  6.         iota(par.begin(), par.end(), 0);
  7.     }
  8.     int find(int v) {
  9.         return (v==par[v] ? v : find(par[v]));
  10.     }
  11.     void unite(int u, int v) {
  12.         u = find(u), v = find(v);
  13.         if(sz[u] < sz[v]) swap(u, v);
  14.  
  15.         op.emplace_back(u, v);
  16.         par[v] = u, sz[u] += sz[v];
  17.     }
  18.     void UNDO(int t) {
  19.         while(op.size()>t) {
  20.             auto [u, v] = op.back();
  21.             op.pop_back();
  22.             par[v] = v, sz[u] -= sz[v];
  23.         }
  24.     }
  25. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement