#include
#define maxsize 1000
void
init
(int
,int
);intgetf
(int);
intdisjointsetmerge
(int
,int);
int f[maxsize]=;
//我也不知道如何把遞迴函式中不用全域性變數
/*先閱讀主函式是乙個好習慣*/
intmain()
for(
int i=
1;i)printf
("%d\n"
,sum)
;return0;
}/*陣列初始化*/
void
init
(int n,
int f)
/*尋找根節點遞迴函式*/
intgetf
(int v)
}/*合併兩個子集*/
intdisjointsetmerge
(int v,
int u)
return0;
}
用c語言實現 並查集
題目描述 假如已知有n個人和m對好友關係 存於集合r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。輸入輸入包含多個測試用例,每個測試用例的第一行包含兩個正整數 n m,1 n,m 100000。接下來有m行,每行分別輸入兩個人...
Kruskal演算法的C語言實現(並查集版)
問題 kruskal演算法求加權連通圖的最小生成樹的演算法。kruskal演算法總共選擇n 1條邊,所使用的貪婪準則是 從剩下的邊中選擇一條不會產生環路的具有最小耗費的邊加入已選擇的邊的集合中。注意到所選取的邊若產生環路則不可能形成一棵生成樹。kruskal演算法分e 步,其中e 是網路中邊的數目。...
C 實現並查集
將n個不同的元素分成一組不相交的集合。開始時,每個元素就是乙個集合,然後按規律將兩個集合進行合併。假如已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接的或間接的好友關係 好友的好友的好友.則認為他們屬於同一好友圈,請求出這n個人中有幾個好友圈。例如 n 5,m 3,r 表示有5個人,1和2是...