有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 <bits/stdc++.h>
#define sf(a) scanf("%d\n",&a)
#define pf(a) printf("%.2lf\n",a)
#define pi acos(-1.0)
#define E 1e-8
#define ms(a) memset(a,0,sizeof a)
#define rep(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int idata=100000+5;int i,j,k;
int judge,flag;
//int step[idata];
//int dp[idata];
int n,m,t,ans;
int maxx=0,minn=inf;
int cnt,len,sum;
string s[idata];
vector<int>vec[100+5];
int tail=1,head=0;int main()
{while(cin>>n>>k){int a[100+5];for(i=1;i<=n;i++) a[i]=i;pair<int,int> rela[10*k];for(i=1;i<=k;i++){cin>>rela[i].first>>rela[i].second;if(rela[i].first>rela[i].second)swap(rela[i].first,rela[i].second);}sort(rela+1,rela+1+k);vec[1].push_back(1);a[1]=0;cnt=1;for(i=1;i<=k;i++){for(j=1;j<=cnt;j++){vector<int>::iterator it=find(vec[j].begin(),vec[j].end(),rela[i].first);vector<int>::iterator itt=find(vec[j].begin(),vec[j].end(),rela[i].second);if(it!=vec[j].end()&&itt==vec[j].end()){flag=1;vec[j].push_back(rela[i].second);a[rela[i].second]=0;}else if(it==vec[j].end()&&itt!=vec[j].end()){flag=1;vec[j].push_back(rela[i].first);a[rela[i].first]=0;}else if(it==vec[j].end()&&itt==vec[j].end()){cnt++;vec[cnt].push_back(rela[i].first);vec[cnt].push_back(rela[i].second);a[rela[i].first]=0;a[rela[i].second]=0;}}}for(i=1;i<=cnt;i++){int temp=vec[i].size();maxx=max(maxx,temp);}for(i=1;i<=n;i++)if(a[i]) cnt++;cout<<cnt<<" "<<maxx<<endl;}
}

并查集:

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define sf(a) scanf("%d\n",&a)
#define pf(a) printf("%.2lf\n",a)
#define pi acos(-1.0)
#define E 1e-8
#define ms(a) memset(a,0,sizeof a)
#define rep(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int idata=1e6+5;int i,j,k;
int judge,flag;
int n,m,t,ans;
int maxx=0,minn=inf;
int cnt,len,sum;
//int dp[idata][idata];
priority_queue<ll, vector<ll>,less<ll> >q;
char *ch;
int p[idata];
int fa[idata];int Find(int son)
{return (fa[son]==son) ? son : (fa[son]=Find(fa[son]));
}
void Union(int x,int y)
{x=Find(x),y=Find(y);if(x!=y) fa[y]=x;//将较小的数设置为父节点
}int main()
{while(cin>>n>>k){for(i=1;i<=n;i++)fa[i]=i;for(i=1;i<=k;i++){int a,b;cin>>a>>b;Union(a,b);}ms(p);cnt=0,maxx=0;for(i=1;i<=n;i++) p[Find(i)]++;for(i=1;i<=n;i++){if(p[i]>0) cnt++;maxx=max(maxx,p[i]);}cout<<cnt<<" "<<maxx<<endl;}return 0;
}

1362:家庭问题(family)(并查集)相关推荐

  1. 树形结构 —— 并查集

    [概述] 并查集(Union-Find Set)是一种用于分离集合操作的抽象数据类型,其处理的是集合(set)之间的关系,一般处理的是图的连通分量,当给出两个的元素的一个无序对 (a,b) 时,需要快 ...

  2. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  3. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  4. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  5. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  6. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  7. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

  8. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

  9. 1013 Battle Over Cities(并查集解法)

    关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...

  10. 并查集专题练习:好朋友(未完待续)

    有空再把题目补上 输入样例1 4 2 1 4 2 3 样例输出1 2 输入样例2 7 5 1 2 2 3 3 1 1 4 5 6 输出样例2 3 解题思路: 1. 这题放在并查集的专题后面,有查找也有 ...

最新文章

  1. 这几年遇到的奇葩程序员(1)
  2. CSS块级元素与行内元素的区别和联系
  3. aqara (737) -(a俩)_A-史密斯:勇士有人类已知的最强后场组合,湖人很难限制
  4. Three.js 基础
  5. Flutter实战一Flutter聊天应用(八)
  6. 服务器版“永恒之蓝”高危预警 (Samba远程命令执行漏洞CVE-2017-7494) 攻击演示...
  7. 按头安利 好看又实用的鼠标事件网页特效素材看这里
  8. Centos7 安装奔跑的小火车
  9. java读取ppm图片_C++ 输出PPM格式图片文件
  10. oracle怎么查表空间,如何查看oracle所有的表空间
  11. 情怀——推荐梁晓声新作《未死的沙威》
  12. Laya Air游戏开发模式之MVC模式(核心篇)
  13. 笔记本建立WIFI热点的bat命令
  14. jack server 常见错误解决方法
  15. 【loadrunner】——利用loadrunner进行压力测试
  16. 三篇论文,纵览深度学习在表格识别中的最新应用
  17. ARGB颜色快速取大对比度色(保留原本透明度)
  18. 利用logic friday 把分组密码Present的S盒转化成布尔函数(转载)
  19. CSS学习07之字体样式
  20. 公路水运工程安全电子光盘_公路水运工程施工安全标准化.pdf

热门文章

  1. 手机号归属地能改吗?支付及通讯行业怎么看?
  2. ASP代码加密_ASP加密代码
  3. 四月,诗月,你是最美人间四月天。
  4. Crazy Mother
  5. linux ubuntu木马,Ubuntu病毒查杀 ClamAV 简介以及适用范围
  6. 转发: 安全百科 DNS欺骗
  7. Mac中brew使用时的报错解决方法集锦
  8. 如何在D盘以管理员身份,运行cmd
  9. 小米10获取root权限_2020年小米红米Miflash新版刷机救砖恢复去除ROOT权限教程
  10. iOS模块化灰度 A/BTest