當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個「社交集群」是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。
輸入格式:
輸入在第一行給出乙個正整數 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
// 並查集模板
// author : riotian
// time : 20/11/08
#include using namespace std;
typedef long long ll;
const int n = 1e3 + 10;
int f[n], a[n], cir[n];
int find(int x)
void merge(int x, int y)
int main()
}for (int i = 1; i <= n; ++i) cir[find(i)]++;
sort(cir + 1, cir + 1 + n, greater()); //按從大到小排序
int i;
for (i = 1; i <= 1000; ++i)
if (cir[i] == 0)
cout << i << endl;
for (int j = 1; j <= i; j++)
cout << endl;
return 0;
}
code update
// murabito-b 21/04/23
#include using namespace std;
using ll = long long;
int f[1010], a[1010], cir[1010];
int find(int x)
void merge(int x, int y)
void solve()
}for (int i = 1; i <= n; ++i) cir[find(i)]++;
sort(cir + 1, cir + n + 1, greater()); //按從大到小排序
int i = 1;
for (; i <= 1000; ++i)
if (!cir[i])
cout << i << "\n";
for (int j = 1; j <= i; ++j)
cout << "\n";
}int main()
L3 003 社交集群
在社交網路平台註冊時,使用者通常會輸入自己的興趣愛好,以便找到和自己興趣相投的朋友。有部分興趣相同的人們就形成了 社交集群 現請你編寫程式,找出所有的集群。輸入格式 輸入的第一行給出正整數n 1000 即社交網路中的使用者總數 則使用者從1到n編號 隨後n行,每行按下列格式列出每個人的興趣愛好 ki...
L3 003 社交集群
在社交網路平台註冊時,使用者通常會輸入自己的興趣愛好,以便找到和自己興趣相投的朋友。有部分興趣相同的人們就形成了 社交集群 現請你編寫程式,找出所有的集群。輸入格式 輸入的第一行給出正整數n 1000 即社交網路中的使用者總數 則使用者從1到n編號 隨後n行,每行按下列格式列出每個人的興趣愛好 ki...
L3 003 社交集群
l3 003.社交集群 時間限制 1000 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 在社交網路平台註冊時,使用者通常會輸入自己的興趣愛好,以便找到和自己興趣相投的朋友。有部分興趣相同的人們就形成了 社交集群 現請你編寫程式,找出所有的集群。...