並查集在findfather()函式中進行壓縮路徑,陷阱是這裡只壓縮該結點以上到根的路徑,其以下的路徑不壓縮,這裡不搞清楚會有三個測試點過不去
#include
#include
#include
using
namespace std;
int n;
vector<
int> hobby[
1001];
int father[
1001];
int cluster[
1001]=
;int
findfather
(int a)
;void
unionelem
(int a,
int b)
;bool
cmp(
int a,
int b)
;int
main()
}for
(int i=
1; i<=
1000
; i++
)for
(int i=
1; i<=n; i++
)sort
(cluster, cluster+
1001
, cmp)
;int clu =0;
while
(cluster[clu]
>
0) clu++
;printf
("%d\n"
, clu)
;for
(int i=
0; i)return0;
}int
findfather
(int a)
return a;
}void
unionelem
(int a,
int b)
bool
cmp(
int a,
int b)
浙大PAT甲級 1107 並查集
這個題目求有共同愛好的人的集體數,以及從大到小輸出各個集體的人數。並查集的思想。我的思路是 用num i 陣列表示根為愛好i的人數個數。最後排序統計不等於的num i 有多少個,然後排序,後序輸出。ac include include include include include include ...
PAT 甲級並查集總結
並查集 disjoint set 是一種可以動態維護若干個不重疊的集合,並支援合併與查詢兩種操作的一種資料結構。init 初始化 union int x,int y 合併兩個元素 findfather int x v找元素的所屬集合 我們建立乙個陣列father表示乙個並查集,father i 表示...
PAT甲級1004題解 並查集思想改
題目分析 本題開始一直在考慮如何將每乙個節點通過一種合適的資料結構儲存起來 一對多的關係 最後發現借助並查集的思想可以用乙個陣列p,p i 存放i節點的父節點,每次查詢編號為i的節點屬於第幾層且判斷是否有以該點位父元素的節點 判斷該點是否為葉子節點,是則floor 對應層數 由於本題的圖不存在環路,...