並查集入門 結構體 陣列 實現 ACM

2021-10-08 05:57:00 字數 1554 閱讀 2497

我的部落格原文:

用集合中的某個元素來代表這個集合,,該元素稱之為集合的代表元

每個集合可以理解為乙個樹,對於集合中的每個元素(如x),都有乙個值(如parent[x])指向其在結構上的父節點。如果x為集合的代表元,即根節點,則令parent[x]=x;

對於查詢操作,假設需要確定x所在的的集合,也就是確定集合的代表元。可以沿著parent[x]不斷在樹形結構中向上移動,直到到達根節點。

判斷兩個元素是否屬於同一集合,只需要看他們的代表元是否相同即可。

包括對所有單個的資料建立乙個單獨的集合(即根據題目的意思自己建立的最多可能有的集合,為下面的合併查詢操作提供操作物件)

結構體表示法

#define max 10000

struct node

node[max];

// 初始化i集合的函式

void init(int i)

陣列表示法
int parent[max];

int rank[max];

int data[max];

void init(int i)

結構體
/**

*查詢集合i(乙個元素是乙個集合)的源頭(遞迴實現)。

如果集合i的父親是自己,說明自己就是源頭,返回自己的標號;

否則查詢集合i的父親的源頭。

**/int get_parent(int x)

陣列
// 查詢集合i(乙個元素是乙個集合)的源頭(遞迴實現)

int find_set(int i)

// 查詢的同時進行集合的優化的函式(減少樹的高度)

int unifind(int a)

// compress the path

while( a != root)

return root;

}

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-geb8dz4y-1595032422862)(

talk is cheep,show the code.

結構體
void union(int a,int b)

}

陣列
void union(int i,int j)

}

計算最後有多少元素父元素仍然為自己parent[x]==x,就算出有多少個不相交的集合

// 這裡只放結構體的函式了

int count(int i)

}return c;

}

acm典型例題:acm_hdu_1213

傻子都能看懂的並查集入門-ocean

ACM入門(1) 資料結構 並查集

acm入門 1 資料結構 並查集 並查集 一 檢索某元素屬於哪個集合 find 函式 二 合併兩個集合 union 函式 能夠查詢某個元素屬於哪個集合 即 查 同時能夠實現集合的合併 即 並 這樣的資料結構,我們稱之為並查集。並查集的實現 c c define max size 元素個數 int p...

並查集入門

簡述 其實並查集顧名思義就是有 合併集合 和 查詢集合 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。演算法 用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節...

並查集入門

1.並查集是一種樹形的資料結構,顧名思義,它用於處理一些不交集的合併及查詢問題。它支援兩種操作 查詢 find 確定某個元素處於哪個子集 合併 union 將兩個子集合並成乙個集合。初始化 void makeset int size 查詢 int find int x 合併 void unionse...