並查集 體會以及模板

2021-09-25 15:56:41 字數 1000 閱讀 5210

啥是並查集,就是將所有有相關性的元素放在乙個集合裡面,整體形成乙個樹型結構,它支援合併操作,但卻不支援刪除操作

實現步驟:

(1)初始化,將所有節點的父親節點都設定為自己,例如pre[1]=1

(2)合併,將乙個元素或者一集合(兩者間有聯絡)合併到另外乙個集合(元素)裡面,誰是誰的父親節點不需要過多在意,視題意而定。

(3)查詢,在合併時需要運用到查詢操作,即查詢該元素的父節點,盡量使用路徑壓縮,可以使並查集更加高效,一旦使用了路徑壓縮,查詢時就會將該查詢元素到父親的邊改為直接連向根。

這道模板題方便理解:

有幾張桌子就是有幾個集合,最後查詢一下有幾個祖宗節點就是答案啦

並查集模板題how many tables - hdu 1213 - virtual judge

ac**:

#include

#include

#include

#include

#include

using namespace std;

//有幾個集合就有幾張桌子

int n,m;

int father[

30005

],vis[

30005];

struct nodestar[

30005];

intfind

(int x)

return star[x]

.father;

}void

combine

(int a,

int b)

}int

main()

for(

int i=

1;i<=m;i++

)int ans=0;

for(

int i=

1;i<=n;i++)}

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