南邮 OJ 1414 家庭问题

来源:互联网 发布:淘宝上库克运动是真么 编辑:程序博客网 时间:2024/05/01 16:51

家庭问题

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 139            测试通过 : 61 

比赛描述

有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二个整数(0≤n≤100)(用空格分隔),接下来的k行,每行二个整数(用空格分隔)表示关系

输出

二个整数(分别表示家庭个数和最大家庭人数)

样例输入

6 3
1 2
1 3
4 5

样例输出

3 3

提示

 

题目来源

JSOI2010



#include<stdio.h>int a[101],b[101];int getMinIndex(int i){return a[i]==i ? i : a[i]=getMinIndex(a[i]);}int main(){int n,k,i,j;scanf("%d%d",&n,&k);for(i=1; i<=n; i++){a[i] = i;b[i] = 1;}int p, q, maxNum = 1;while(k--){scanf("%d%d",&i,&j);p = getMinIndex(i);q = getMinIndex(j);if(p<q){n--;a[q] = p;b[p] += b[q];if(b[p]>maxNum){maxNum = b[p];}}else if(p>q){n--;a[p] = q;b[q] += b[p];if(b[q]>maxNum){maxNum = b[q];}}}printf("%d %d\n",n,maxNum);}






0 0
原创粉丝点击