L3 003 社交集群 30分

2021-10-10 07:46:25 字數 1332 閱讀 4391

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

輸入格式:

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

k​i​​ : h​i[1] h​i​​[2] … h​i[k​i​​ ]其中k​i​​(>0)是興趣愛好的個數,h​i[j]是第j個興趣愛好的編號,為區間 [1, 1000] 內的整數。

輸出格式:

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

輸入樣例:

83:

27101

:42:

531:

41:3

1:44

:681

51:4

輸出樣例:

343

1

#include

#include

#include

using

namespace std;

int n, k, h, f[

1001

], h[

1001

], flag =0;

intfind

(int x)

void

union

(int a,

int b)

intmain()

} map<

int,

int>mp;

multiset<

int, greater<

int>>st;

for(

int i =

1; i <= n;

++i)

mp[find

(i)]++;

for(

auto

& it : mp)

st.insert

(it.second)

; cout << st.

size()

<< endl;

for(

auto

& it : st)

cout <<

(flag++

?" ":""

)<< it;

return0;

}

L3 003 社交集群 (30 分)

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

L3 003 社交集群 30分

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

L3 003 社交集群 30 分

include using namespace std int vis 1010 vector int table 1010 每個人對應的興趣 vector int val person 1010 每個興趣對應的人 bool cmp int a,int b void gethorde int peo...