A1107社交圈(並查集)

2021-10-08 03:23:24 字數 1007 閱讀 8709

輸入n個人的愛好,愛好相同的在同乙個社交圈,跟書上的好朋友一樣,如果a、b都喜歡活動1,b、c都喜歡活動2,a和b在同一圈,b和c在同一圈,則a和c也在同一圈。

跟書上一樣,書上直接給出朋友關係,本題需要先依靠hobby來判斷是否在同乙個集合,還有就是書上是直接用bool陣列判斷是根節點的個數,本題更進一步,需要求出每個集合中的元素個數。

#include

#include

using

namespace std;

const

int n=

1100

;int father[n]

;//存放父親結點

int hobby[n]=;

//hobby[h]為任何乙個喜歡活動h的人的編號

int isroot[n]=;

intfindfather

(int x)

void

union

(int a,

int b)

}int

cmp(

int a,

int b)

void

init

(int n)

}int

main()

union

(i,findfather

(hobby[h]))

;//合併i跟hobby[h]的集合 }}

for(

int i=

1;i<=n;i++

)int ans=0;

for(

int i=

1;i<=n;i++

)printf

("%d\n"

,ans)

;sort

(isroot+

1,isroot+

1+n,cmp)

;for

(int i=

1;i<=ans;i++

)return0;

}

pat甲級1107 並查集

並查集在findfather 函式中進行壓縮路徑,陷阱是這裡只壓縮該結點以上到根的路徑,其以下的路徑不壓縮,這裡不搞清楚會有三個測試點過不去 include include include using namespace std int n vector int hobby 1001 int fat...

浙大PAT甲級 1107 並查集

這個題目求有共同愛好的人的集體數,以及從大到小輸出各個集體的人數。並查集的思想。我的思路是 用num i 陣列表示根為愛好i的人數個數。最後排序統計不等於的num i 有多少個,然後排序,後序輸出。ac include include include include include include ...

PAT 社交集群(並查集)

輸入在第一行給出乙個正整數 n 1 000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,每行按以下格式給出乙個人的興趣愛好列表 k i h i 1 h i 2 h i k i 其中k i 0 是興趣愛好的個數,h i j 是第j 個興趣愛好的編號,為區間 1,...