可持久化4--可持久化并查集
可持久化并查集
可持久化并查集 = 按秩合并并查集 + 可持久化數(shù)組
首先并查集不能采用路徑壓縮,這是因?yàn)橐淮蝔indR操作中,fa數(shù)組的很多位置(u->ru)會發(fā)生修改,由于每次修改都需要在可持久化數(shù)組上復(fù)制產(chǎn)生log個(gè)新結(jié)點(diǎn),空間復(fù)雜度過大。我們不希望每個(gè)版本的fa數(shù)組的差別太大,最好只有常數(shù)個(gè)位置改變。
啟發(fā)式合并/按秩合并
當(dāng) merge(u,v) 時(shí),找到ru,rv后,讓 sz 小的接在sz大的下面:
if(sz[ru] > sz[rv]) swap(ru,rv); fa[ru] = rv; sz[rv] += sz[ru]或者讓高度(到葉子的最長距離)height 小的接在 height 大的下面:
if(height[ru] > height[rv]) swap(ru,rv); fa[ru] = rv; if(height[ru] == height[rv]) ++height[rv];按sz合并一般稱為啟發(fā)式合并,按height合并一般稱為按秩合并,二者的復(fù)雜度都是logN(每向上走1條邊,身處的子樹sz至少擴(kuò)大1倍),且每次 merge 操作時(shí),fa數(shù)組只有2個(gè)位置會發(fā)生修改(fa[ru]和sz[rv]),直接用可持久化下標(biāo)線段樹維護(hù)fa數(shù)組就可以實(shí)現(xiàn)可持久化。
空間復(fù)雜度是O(NlogN)
時(shí)間復(fù)雜度是O(Nlog2NNlog^2NNlog2N)
例題:
P3402 可持久化并查集
「NOI2018」歸程
總結(jié)
以上是生活随笔為你收集整理的可持久化4--可持久化并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2403 [SDOI2010]所驼门王
- 下一篇: 可持久化汇总(讲解+题目)