日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可持久化4--可持久化并查集

發(fā)布時(shí)間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可持久化4--可持久化并查集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

可持久化并查集

可持久化并查集 = 按秩合并并查集 + 可持久化數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。