演算法模版之並查集

2021-08-20 05:50:37 字數 740 閱讀 3515

簡介:並查集實質是一種樹形的資料結構,一般用於處理一些不相交集合的合併及查詢問題。在具體問題解決上,比如找公共祖先節點、檢查圖的連通性等等,用通俗點的語言來描述的話,例如乙個幫派(有點社會呀),a的大哥是b,b的大哥是c,c的大哥是d,此時a、b、c、d互相是不認識的,假如發生了幫派爭鬥,b和d相遇了,為了不傷到自己人,他們兩個就必須確定對方是不是自己人,這個時候,b就問自己的大哥c,d是哪根蔥,c反手就給b乙個耳刮子,說,那是你大哥我的大哥,你想不想混啦,這個時候就可以確定b和d是一夥的了,而當a和d相遇時,又要問同樣的問題,a要問自己的大哥b,並且這樣一層層問上去,明顯很麻煩,而且還有被打的危險,這時候並查集就出現了,d老大哥說,以後你們不要亂認大哥了,幫派裡就我乙個大哥,你們都直接單線跟我聯絡就行啦。不知道這樣解釋能不能懂。在資料結構中,就是將當前節點的指標都指向根節點(我感覺用指標更好理解)。

具體**如下:

class main ,,};

head=new int [5];

for(int i=1;i<=4;i++)

head[i]=i;//建立指標,沒有給定關係之前直接指向自己

for(int i=0;i<3;i++)

for(int i=1;i<=4;i++)//路徑壓縮,將所有有關聯的節點指向共同的祖先節點

f(i);

} static void u (int a,int b)

static int f(int i)

}

模版 並查集

什麼是並查集 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。為何使用inline inline是c 關鍵字,在函式宣告或定義中,函式返回型別前加上關鍵字inline,即可以把函式指定為內聯函式。這樣可以解決一些頻繁呼叫的函式大量消耗棧空間 棧記憶體...

並查集 模版

並查集 並查集,在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。這一類問題近幾年來反覆出現在資訊學的國際國內賽題中,其特點是看似並不複雜,但資料量極大,若用正常的資料結構來描述的話...

模版 並查集(及其加權)

並查集是經典的圖論演算法,用來維護點與集合的關係,也簡潔明瞭。給定 n nn 個點,有 m mm 次操作,每次操作輸入 pppa aab bb 若 p 1 p 1 p 1 則 合併 aaab bb 若 p 2 p 2 p 2 則 查詢 aaab bb 是否同屬乙個集合 並查集初始化 每個父親點 都 ...