繼月賽出了道可刪除並查集後,又做了幾道可刪除並查集的題,發現之前的**有點小問題。
可刪除並查集的基本原理是設定乙個虛點,也就是說乙個點刪除了,那麼他對應的值就不再是之前的那乙個點,而是變成了其他點。
即可刪除並查集通過id對映的關係查詢我的點在**。
有幾個問題就是初始化時必須要把\(n + m\)個點的父親結點都設定為本身,(n是點個數,m是操作次數)
然後關於查詢父親結點的操作,必須通過id去對映。
對於刪去的點,其實原來的點還是存在的。如果說2的父親是1,且1被刪除,那麼查詢2的父親返回的是1,查詢2的父親,返回的是n+第幾次操作。
但是不影響。主要是我想去查詢這個點的真正父親結點到底是哪個不太行。
struct dsu
int find(int x)
void move(int x)
void init(int n, int m)
void unit(int x, int y)
}} dsu;
傳送門
傳送門傳送門
並查集入門(普通並查集 帶刪除並查集 關係並查集)
什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...
並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
可持久化並查集 可撤銷並查集
主要學習的blog 1 將乙個點的父親 並查集那個fa 進行更改 實際上是新增乙個資訊點 update。2 查詢某個時間點下乙個pos對應的資訊點編號。3 查詢乙個點的父節點。4 更新乙個點的deep值,不用新寫函式,可以用3號操作找到編號後 5 初始化build。pragma gcc optimi...