資料結構練習總結4(並查集MFS)

2021-10-23 01:55:23 字數 1391 閱讀 2344

並查集是用來管理元素分組情況的資料結構,從課件裡找的兩個圖能大致說明。

下面用乙個題具體應用一下

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據「我的朋友的朋友也是我的朋友」這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。

輸入格式:

輸入的第一行包含兩個正整數n(≤30000)和m(≤1000),分別代表學校的學生總數和俱樂部的個數。後面的m行每行按以下格式給出1個俱樂部的資訊,其中學生從1~n編號:

第i個俱樂部的人數mi(空格)學生1(空格)學生2 … 學生mi

輸出格式:

輸出給出乙個整數,表示在最大朋友圈中有多少人。

輸入樣例:

7 43 1 2 3

2 1 4

3 5 6 7

1 6輸出樣例:

4

#include

typedef

int mfs[

10000];

intgetconfirstname

(mfs set,

int v)

;void

checkcon

(mfs m)

;void

crtcon

(mfs m)

;void

contcon

(mfs m,

int n)

;int

getconfirstname

(mfs m,

int v)

void

checkcon

(mfs m)

void

crtcon

(mfs m)

else}}

void

contcon

(mfs m,

int n)

if(count ==1)

printf

("the network is connected.\n");

else

printf

("there are %d components.\n"

, count);}

intmain()

do}while

(a !=

's')

;return0;

}

實際上就是陣列的下標+1表示對應的元素,而陣列元素的值為他的上級節點的下標(上級節點表示與之聯通也就是屬於同乙個集合),如果陣列元素的值為負值則表示無上級節點,而且負值的絕對值表示他領導的集合中元素的個數。

資料結構 之 並查集 總結

資料結構 並查集 並查集 union find set 一種用於管理分組的資料結構。它具備兩個操作 1 查詢元素a和元素b是否為同一組 2 將元素a和b合併為同一組。注意 並查集不能將在同一組的元素拆分為兩組。並查集的實現 用樹來實現。使用樹形結構來表示以後,每一組都對應一棵樹,然而我們就可以將這個...

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...

資料結構 並查集

time limit 1000ms memory limit 65536k 某城市有n個人,現在給定關於n個人的m條資訊,m條資訊是兩個人在同乙個小區,根據所給資訊,判斷這個城市最多可能有多少個小區。n個人編號為1 n。多組輸入。每組第一行有兩個整數n,m 2 n 50000,0 m n 2 接下來...