1362:家庭問題(family)
時間限制: 1000 ms 內存限制: 65536 KB
提交數: 2937 通過數: 1507
【題目描述】
有n個人,編號爲1,2,……n,另外還知道存在K個關係。一個關係的表達爲二元組(α,β)形式,表示α,β爲同一家庭的成員。
當n,k和k個關係給出之後,求出其中共有多少個家庭、最大的家庭中有多少人?
例如:n=6,k=3,三個關係爲(1,2),(1,3),(4,5)
此時,6個人組成三個家庭,即:{1,2,3}爲一個家庭,{4,5}爲一個家庭,{6}單獨爲一個家庭,第一個家庭的人數爲最多。
【輸入】
第一行爲n,k二個整數(1≤n≤100)(用空格分隔);
接下來的k行,每行二個整數(用空格分隔)表示關係。
【輸出】
二個整數(分別表示家庭個數和最大家庭人數)。
【輸入樣例】
6 3
1 2
1 3
4 5
【輸出樣例】
3 3
思路:並查集去做
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
#define N 301
using namespace std;
int father[N];
int a[N];
int find(int x){//查找
if(father[x] == x)
return x;
return father[x] = find(father[x]);
}
void un(int x, int y){//歸併
int f1 = find(x);
int f2 = find(y);
if(f1 != f2)
father[f2] = f1;
}
int main(){
int n,k;
cin >> n >> k;
for(int i = 1; i <= n; i++)
father[i] = i;
for(int i = 1; i <= k; i++)
{
int x,y;
cin >> x >> y;
un(x,y);
}
for(int i = 1; i <= n; i++)
a[find(i)]++;
int ans = 0, maxn = 0;
for(int i = 1; i <=n; i++){
if(a[i] > 0)
ans++;
maxn = max(maxn,a[i]);
}
cout << ans << " " << maxn <<endl;
return 0;
}