並查集是用來管理元素分組情況的資料結構,從課件裡找的兩個圖能大致說明。
下面用乙個題具體應用一下
某學校有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 接下來...