並查集是一種在集合相關問題裡面常用的資料結構。尤其是在將一些資料按照某些關係劃分為幾個「團簇」的時候,使用並查集幾乎是最高效率的。
前面有一道演算法題:將外賣單子按小區分,乙個小區的放到一堆裡面方便運送。這就是乙個很典型的並查集應用。每個小區成為乙個集合。
集合中除了父節點外,每乙個節點都有乙個自己的父節點。
如此遞迴地查詢,最終得到的就是整個集合的根結點。
很明顯,乙個集合的跟節點只有乙個。因此可以根據兩個元素所在集合的根結點是否相同來判斷這兩個元素是否在同乙個集合中。
int father[n]
// 查詢所在集合的根結點
intfindfather
(int a)
return a;
}// 合併兩個集合
void
unionset
(int a,
int b)
}
另外在查詢的過程中還可以壓縮路徑。
在計算生成樹的時候,也用到了並查集。
資料結構 並查集
並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...
資料結構 並查集
time limit 1000ms memory limit 65536k 某城市有n個人,現在給定關於n個人的m條資訊,m條資訊是兩個人在同乙個小區,根據所給資訊,判斷這個城市最多可能有多少個小區。n個人編號為1 n。多組輸入。每組第一行有兩個整數n,m 2 n 50000,0 m n 2 接下來...
資料結構 並查集
一 基本概念 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。在一些有n個元素的集合應用問題中,通常是在開始時讓每個元素構成乙個單元素的...