L3 003 社交集群 30分 C 並查集

2021-10-24 22:23:55 字數 1389 閱讀 2389

當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個「社交集群」是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。

輸入格式

輸入在第一行給出乙個正整數 n(≤1000),為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,每行按以下格式給出乙個人的興趣愛好列表:ki: hi [1] hi[2] … hi[ki]。其中ki(>0)是興趣愛好的個數,hi[j]是第j個興趣愛好的編號,為區間 [1, 1000] 內的整數。

輸出格式

首先在一行中輸出不同的社交集群的個數。隨後第二行按非增序輸出每個集群中的人數。數字間以乙個空格分隔,行末不得有多餘空格。

輸入樣例

8

3: 2 7 10

1: 4

2: 5 3

1: 4

1: 3

1: 4

4: 6 8 1 5

1: 4

輸出樣例
3

4 3 1

本題採用並查集的思想,把每一組輸入的興趣愛好的第乙個設為父結點,後面的興趣愛好向父結點靠攏,最後統計相同父結點的點個數然後輸出即可。

c++ **

#include

using

namespace std;

const

int n =

1010

;int n;

int intri[n]

;int fa[n]

;int

find

(int x)

intmain()

else}}

for(

int i=

1;i<=n;i++

) intri[i]

=find

(intri[i]);

map<

int,

int> mp;

for(

int i=

1;i<=n;i++

) cout

int> ans;

for(

auto x:mp) ans.

push_back

(x.second)

;sort

(ans.

begin()

,ans.

end())

;reverse

(ans.

begin()

,ans.

end())

;int flag=0;

for(

auto x:ans)

return0;

}

L3 003 社交集群 (30 分)

當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,...

L3 003 社交集群 30分

當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入格式 輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後...

L3 003 社交集群 30分

原題鏈結 並查集要想明白 合併的是什麼是通過什麼合併的 合併的是人的編號 通過是否喜歡同乙個活動x進行判斷 1 int course x 喜歡活動x的人的編號如果這個活動沒人喜歡過就要設定course x i 喜歡過的話就合併 2 findfather course x 喜歡活動x的人所在的社交圈子...