家庭问题
来源:互联网 发布:scientific linux 界面 编辑:程序博客网 时间:2024/04/26 07:12
- Description
有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}单独为一个家庭,第一个家庭的人数最多。
- Input
第一行为n,k二个整数(0≤n≤100)(用空格分隔),接下来的k行,每行二个整数(用空格分隔)表示关系
- Output
二个整数(分别表示家庭个数和最大家庭人数)
- Sample Input
6 3
1 2
1 3
4 5
- Sample Output
3 3
#include<iostream>using namespace std;#define Minn(x,y) ((x)<(y)?(x):(y))#define Maxx(x,y) ((x)>(y)?(x):(y))int father[102];int search(int i){ int r,l; for(r=i;r!=father[r];r=father[r]); l=i; if(i!=r) while(father[i]!=r) { l=father[i]; father[i]=r; i=l; } return r;}void link(int a,int b){ int x=search(a),y=search(b); int min,max; min=Minn(x,y); max=x+y-min; father[max]=min;}int main(){ int n,k,i,x,y,cou=1,visit[102]={1,0},cc[102]={0},mm; cin>>n>>k; for(i=0;i<n;i++) father[i]=i; for(i=0;i<k;i++) { scanf("%d%d",&x,&y); link(x,y); } for(i=0;i<n;i++) search(i); for(i=0;i<n;i++) { if(!visit[father[i]]) { cou++; visit[father[i]]=1; } cc[father[i]]++; } mm=-1; for(i=0;i<n;i++) { if(cc[i]>mm) mm=cc[i]; } cout<<cou<<" "<<mm<<endl; return 0;}
0 0
- 家庭问题
- 1662 家庭问题
- 南邮 OJ 1414 家庭问题
- 变态暴力家庭过河问题
- 中国家庭的七大饮食问题
- win7家庭普通版没有管理员权限问题
- 家庭问题(广度优先搜索)
- 家庭无线网络局域网PING不通的问题
- SSL1662 家庭问题(并查集)
- 家庭云及其它(节外生枝:License问题)
- SSL 1662_家庭问题_并查集
- 问题少年生存状况调查:每人背后都有问题家庭
- 家庭医学
- 家庭电路
- 家庭作业
- 家庭装修
- 家庭管理
- 智能家庭
- Havel-Hakimi定理(判断是否可图序列)
- 程序员必须知道的7大基础实用算法及其讲解
- Android 开发 日期,时间拾取器
- CentOS 7 / RHEL 7 上安装 LAMP + phpMyAdmin
- python-布尔运算
- 家庭问题
- Tomcat8.0不能重建
- 五种常用算法
- Selenium启动火狐浏览器后报错Plugin Container for firefox已停止工作
- PHP Warning: date() [function.date]: It is not safe to
- android studio for max 初体验
- c++课程实训 银行储蓄系统
- Activity之onSaveInstanceState()和 onRestoreInstanceState()方法
- 动画集合