题目描述
有 n 个人,编号为 1, 2, …… n,另外还知道存在 K 个关系。
一个关系的表达为二元组(α,β)形式,表示 α,β 为同一家庭的成员。
当 n,k 和 k 个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?
输入格式
第一行为 n, k 二个整数(用空格分隔);
接下来的 k 行,每行二个整数(用空格分隔)表示关系。
输出格式
二个整数(分别表示家庭个数和最大家庭人数)。
输入样例
6 3
1 2
1 3
4 5
输出样例
3 3
数据范围
1 ≤ n ≤ 100
题解
并查集:
#include <iostream>
using namespace std;
const int N = 110;
int n, m;
int p[N], cnt[N];
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i ++)
{
p[i] = i;
cnt[i] = 1;
}
int family = n, number = 1;
while(m --)
{
int a, b;
cin >> a >> b;
a = find(a), b = find(b);
if(a != b)
{
p[a] = b;
cnt[b] += cnt[a];
family --;
number = max(number, cnt[b]);
}
}
cout << family << ' ' << number << endl;
return 0;
}
ps:并查集的裸题,为啥把它放到队列这一章 🙃