PTA 天梯賽 L3 003 社交集群(並查集)

2022-01-10 00:16:26 字數 1762 閱讀 8797

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

輸入格式:

輸入在第一行給出乙個正整數 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 作者 陳越 在社交網路平台註冊時,使用者通常會輸入自己的興趣愛好,以便找到和自己興趣相投的朋友。有部分興趣相同的人們就形成了 社交集群 現請你編寫程式,找出所有的集群。...