並查集壓縮路徑

2021-06-27 16:37:04 字數 462 閱讀 8083

並查集壓縮路徑:先找到所有節點的最終的根節點,然後通過將所有不與根節點直接相連的並且父節點是根節點的節點直接接在根節點上面,從而減少查詢時間,來達到時間節省的目的!

關於並查集尋找父節點的演算法:主要分為兩類:

一:通過遞迴求解。優點:**較短,並且遞迴的過程中已經包含了壓縮路徑。缺點:資料較大的時候,容易超時,棧溢位,提交到的時候,出現re的錯誤!

**如下:

int find(int r)

二:通過迴圈來求解。缺點:需要自己單獨新增路徑壓縮。優點:使用情況多,不再受資料大小的限制。

**如下:

int find(int x)

}

另外:對於運用並查集的題目來說,不同的程式語言,運算時間也不同,(血的教訓,tle了好多次),就個人經驗來說,做過的好幾道題,都是g++提交超時,c++卡時間ac!

路徑壓縮 並查集路徑壓縮

如何描述乙個複雜的連線關係?如圖,很容易判斷緊鄰的2個人關係,但中間的連線很多很亂,怎麼判斷出兩個人的關係呢?並查集就是一種結構,通過儲存節點以及節點上的標籤,來判斷這兩個節點是否連線在一起。當兩個節點繫結時,可以任選其中乙個節點的標籤,指定另乙個節點。當判斷兩個節點是不是連線時,可以上溯節點的祖宗...

並查集 壓縮路徑

並查集 union findsets 一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數等。最完美的應用當屬 實現kruskar演算法求最小生成樹。並查集的精髓 即它的三種操作,結合實現 模板進行理解 1 make s...

並查集路徑壓縮

使用並查集查詢時,如果查詢次數很多,那麼使用樸素版的查詢方式肯定要超時。比如,有一百萬個元素,每次都從第一百萬個開始找,這樣一次運算就是10 6,如果程式要求查詢個一千萬次,這樣下來就是10 13,肯定要出問題的。這是樸素查詢的 適合資料量不大的情況 int findx int x 下面是採用路徑壓...