可撤銷並查集學習筆記

2022-06-06 16:57:09 字數 590 閱讀 1723

可撤銷並查集用啟發式合併來優化。

用乙個棧來記錄合併的操作,按照逆序恢復到原來的狀態。

記錄乙個撤銷棧,元素為有序對,如果撤銷這個步驟則令*pelem=nvalue即可。那麼在啟發式合併的時候,每次修改了什麼就記錄什麼,撤銷的時候刪除即可。

#include using namespace std;

#define int long long

const int n = 1000005;

struct dsu

}int find(int p)

void merge(int p,int q)

);fa[p]=q;

if(rank[p]==rank[q])

);++rank[q];

}else);}

}}

void _undo()

sta.pop();

}void undo()

void print(int n)

if(op=="undo")

dsu.print(n);

}}

演算法筆記 可撤銷並查集 可持久化並查集

可撤銷並查集模板 struct ufs inline int find int x inline void merge int x,int y fa x y if rnk x rnk y rnk y else fa y x inline void undo ufs 可持久化並查集模板 struct ...

可持久化並查集 可撤銷並查集

主要學習的blog 1 將乙個點的父親 並查集那個fa 進行更改 實際上是新增乙個資訊點 update。2 查詢某個時間點下乙個pos對應的資訊點編號。3 查詢乙個點的父節點。4 更新乙個點的deep值,不用新寫函式,可以用3號操作找到編號後 5 初始化build。pragma gcc optimi...

帶撤銷並查集 可持久化並查集

帶撤銷並查集支援從某個元素從原來的集合中撤出來,然後加入到乙個另外乙個集合中,或者刪除該元素 用乙個對映來表示元素和並查集中序號的關係,中用 to x 表示x號元素在並查集中的 id 刪除 x 號元素時,需要將 to x 的集合大小減去1,然後令 to x 1 標記 x 刪除即可 如果要重新加入乙個...