Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct ROLLBACK_DSU {
- vector<int>par, sz;
- vector<pair<int,int>>op;
- ROLLBACK_DSU(int n) : par(n+1), sz(n+1, 1) {
- iota(par.begin(), par.end(), 0);
- }
- int find(int v) {
- return (v==par[v] ? v : find(par[v]));
- }
- void unite(int u, int v) {
- u = find(u), v = find(v);
- if(sz[u] < sz[v]) swap(u, v);
- op.emplace_back(u, v);
- par[v] = u, sz[u] += sz[v];
- }
- void UNDO(int t) {
- while(op.size()>t) {
- auto [u, v] = op.back();
- op.pop_back();
- par[v] = v, sz[u] -= sz[v];
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement