模板 並查集

2022-06-01 03:21:12 字數 931 閱讀 2618

//洛谷p3367

並查集演算法也算是演算法中的經典了,它可以用o(logn)的時間支援一張圖中集合的合併與查詢。

這裡,我們首先用乙個陣列fa[x]來表示以x為編號的祖先的編號(*每乙個點的初始祖先為它自身)。

然後就是並查集的重中之重:find()函式!!!

int find(int

x)

find(x)就是查詢點x 所在集合的祖先,並更新fa[x]。

這裡注意,如果沒有fa[x]=find(fa[x]),而只是return find(fa[x])的話,操作久了,樹就會退化成乙個鏈,而失去其logn的時間複雜度,很容易t。

然後,是實現集合之間的合併:merge()

void merge(int x,int

y)

這樣就把x 所在集合的祖先接在y 所在的集合的祖先下面,其中fa[find(x)]=fa[y]也可寫成fa[fa[x]]=fa[y]。

最後就是並查集的查詢操作:query()

bool query(int x,int

y)

如果x,y祖先相同,那麼他們就在乙個集合中,反之則不然。

最後**整合一下如下:

#include#include

#include

#include

#define maxn 10000 + 10

using

namespace

std;

intn,m,opr,v,u;

intfa[maxn];

int find(int

x)void merge(int x,int

y)bool query(int x,int

y)int

main()

return0;

}

並查集模板

來自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年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...