當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個「社交集群」是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。
輸出格式:
首先在一行中輸出不同的社交集群的個數。隨後第二行按非增序輸出每個集群中的人數。數字間以乙個空格分隔,行末不得有多餘空格。
輸入樣例:
83: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4
輸出樣例:
34 3 1
思路
開始把問題想複雜了。其實直接可以:每乙個人用第乙個興趣編號作為代表,將乙個人的興趣編號用並查集和並起來,這樣有相同興趣的人就被分在了乙個組,然後遍歷每乙個人,查詢他的興趣的父親節點,然後用乙個計數陣列技術便可以得到每個圈子有多少人,不為零的個數就是圈子個數。
#includeusing namespace std;
int p[1009], user[1009], hobby[1009];
int find(int x)
return p[x] = find(p[x]);
}void merge(int x, int y)
}bool cmp(int x, int y)
int main()
int n,k,h,num=0;
char ch;
cin >> n;
for(int i=1; i<=n; i++)
} for(int i=1; i<=n; i++)
for(int i=1; i<=1000; i++)
sort(hobby, hobby+1001, cmp);
cout << num << endl;
for(int i=0; i
return 0;
}
PTA 社交集群 (30 分)
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入格式 輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後...
7 2 社交集群 (30 分
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,...
L3 003 社交集群 (30 分)
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,...