Rollback Refuses Compression
Offline dynamic connectivity builds a segment tree over time, applies edges when a DFS enters a node and undoes them when it leaves. The DSU it uses looks like this:
int find_set(int v) {
return (v == p[v]) ? v : find_set(p[v]); // no compression
}
bool unite(int v, int u) {
v = find_set(v); u = find_set(u);
if (v == u) return false;
comps--;
if (rnk[v] > rnk[u]) swap(v, u);
op.push(dsu_save(v, rnk[v], u, rnk[u])); // record for rollback
p[v] = u;
if (rnk[u] == rnk[v]) rnk[u]++;
return true;
}
Path compression is deliberately absent. Why?
Sign in to answer questions and track your progress
Sign In