並查集模板

2021-09-24 00:23:26 字數 870 閱讀 9091

一、並查集的定義

並查集是一種維護集合的資料結構,它的名字中「並」「查」「集」分別取自於union(合併),find(查詢),set(集合)這三個單詞。也就是說,並查集支援下面兩個操作:a)合併:合併兩個集合;b)查詢:判斷兩個元素是否在乙個集合中。並查集通過乙個陣列來實現的:int father[n];其中father[i]表示元素i的父親結點,而父親結點本身也是這個集合內元素。對於同乙個集合來說只存在乙個根結點,且將其作為所屬集合的標識。

二、基本操作

1.初始化

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

2.查詢:

遞推實現:

int findfather(int x)

return x;

}遞迴實現:

int findfather(int x)

3.合併:

在合併的過程中,只對兩個不同的集合進行合併,如果兩個元素在相同集合中,則不會對其操作。並查集產生的每乙個集合都是一棵樹。

void union(int a,int b)

}4.路徑壓縮:

沒有優化過的並查集在極端情況下(形成一條鏈,查詢複雜度最壞為o(n))效率較低,優化可以把當前查詢結點的路徑上的所有結點的父親結點都指向根結點,查詢複雜度可以降為o(1)。

遞推實現:

int findfather(int x)

while(a!=father[a])

return x;

}遞迴實現:

int findfather(int v)

}

並查集模板

來自lifeng wang http hi.baidu.com fandywang jlu 前輩06年寫的東西,追隨前人足跡繼續努力。並查集的一些題目和相關解題報告 poj 1611 the suspects 最基礎的並查集 poj 2524 ubiquitous religions 最基本的並查集...

並查集模板

普通並查集 define max size 100005 int pa max size 儲存有向圖的邊 void init 初始化 該函式可以根據具體情況儲存和初始化需要的內容 int findset int a 不帶路勁壓縮 return a void union nodes int a,int...

並查集模板

codevs 2597 團夥 題目描述 description 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...