並查集 總結

2021-06-29 14:18:31 字數 704 閱讀 6701

自己學完後總結一下吧,並查集,我的理解就是乙個查詢與合併,用乙個find函式來查詢自己的祖先也就是根節點,在這過程中還可以進行路徑壓縮,就是讓這個點直接變到根節點之下,還有就是合併,找出這兩個點的根節點,如果根節點不相同的話,就將乙個根節點放到另乙個根節點下面。

這道題的就是用並查集做,找出總共有幾個集合,再將集合數-1 就是答案,因為用這麼多條邊就可以都連起來了。

並查集詳解:

合併與查詢

int find(int a)

void uni (int a,int b)

}

例題hdu 1232

附上**:

#include #include #include using namespace std;

#define m 1002

int p[m];

int t[m];

int find(int a)

void uni (int a,int b)

}int main()

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

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

if(t[i]==1)

ans++;

printf("%d\n",ans-1);

}return 0;

}

並查集總結

用自己的理解來寫好了 有些地方可能不對 不定時更新理解 操作主要為三步 一 初始化 void init 二 查詢 這個為路徑壓縮 就是每次查詢時更新 查詢節點 x 上面所有節點直接使他們連向根節點 每次查詢更新 int find int x 另一種路徑壓縮 不過麻煩了些 作為理解 int find ...

並查集總結

注 此博文是在老師上課之後總結的,屬於課堂筆記,大部分摘自老師提供的課件。並查集總結總結兩點就是 並 和 查 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組...

並查集總結

並查集是一種管理元素分組的資料結構,是使用樹形結構實現的 作用 1 查詢元素a,b是否屬於同一組 2 合併元素a,b所在的組 只能進行合併,無法進行分割 注意 為避免退化發生,需進行以下操作 1 對於每棵樹,記錄數的高度rank 2 合併時如果兩棵樹的rank不同,從rank小的向rank大的連邊 ...