pat甲級1107 並查集

2021-10-02 21:25:54 字數 1027 閱讀 2486

並查集在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 對應層數 由於本題的圖不存在環路,...