题意:
这个问题的一个重要规则是,如果A知道B,B知道C,这意味着A,B,C互相了解,所以他们可以呆在一张桌子上。
例如:如果我告诉你A知道B,B知道C,D知道E,那么A,B,C可以留在一张桌子上,D,E必须留在另一张桌子上。所以伊格那丢至少需要两张桌子。

Input:
输入以一个整数t开始(1<=t<=25),它指示测试用例的数量。接下来是T测试用例。每个测试用例以两个整数n和m开始(1<=n,m<=1000)。n表示朋友数,朋友标记为1到n,然后m行跟随。每行包含两个整数A和B(A!=b),这意味着A朋友和B朋友互相认识。两个案例之间将有一个空白行。

Output:
对于每个测试用例,只需输出至少需要多少个表。不要打印任何空白。

思路:
方法类似WirelessNetwork。统计需要几个桌子,即统计有几个等价类,统计par[i] == i即可。 用set为什么不行,还没想出来是为什么,等有时间再想一下

#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
#define ll long long int
using namespace std;
const int maxn = 1010;int n, m;//n个人 m行信息
int par[maxn];int find(int x)
{if (par[x] == x)return x;return par[x] = find(par[x]);
}
void initialize()
{for(int i=0;i<=n;i++)par[i] = i;
}int main()
{int t; cin >> t;while (t--){cin >> n >> m;initialize();for (int i = 0; i < m; i++){int a, b, fa, fb;cin >> a >> b;fa = find(a);fb = find(b);if (fa != fb)par[fa] = fb;}/*cout << "par[i]" << ":";for (int i = 0; i <= n; i++)cout << par[i] << " ";cout << endl;*/int ans = 0;for (int i = 1; i <= n; i++)if (par[i] == i)ans++;cout << ans << endl;set方法//set<int> cnt;//for (int i = 1; i <= n; i++)//   cnt.insert(par[i]);//cout << cnt.size() << endl;//cout << "set<int> cnt:";//for (set<int>::iterator it = cnt.begin(); it != cnt.end(); it++)//   cout << *it << " ";//cout << endl;}return 0;
}

hdu 1213 HowManyTables 并查集相关推荐

  1. 27行代码AC_How Many Tables HDU - 1213(并查集讲解)

    励志用少的代码做高效表达 分析与思路 n个人吃饭,只能熟人和熟人坐在一起,否则就一个人坐一桌. 给定m个关系(m对熟人),问最少需要多少张桌子. 纯粹考查的并查集模板的题, 给定m个关系就代表了m个集 ...

  2. ACM2019春季训练- How Many Tables HDU - 1213(初识并查集+转倚天屠龙记故事)

    Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to kn ...

  3. hdu 1232 经典并查集应用

    http://acm.hdu.edu.cn/showproblem.php?pid=1232 完全就是并查集的应用啊... View Code 1 #include<iostream> 2 ...

  4. 畅通工程 hdu 1232 HDU - 1863 (并查集+最小生成树)

    畅通工程hdu 1232 并查集 Problem Description Input Output 参考代码 HDU - 1863 Problem Description Input Output 参 ...

  5. HDU 3234 Exclusive-OR [并查集]

    http://acm.hdu.edu.cn/showproblem.php?pid=3234 #Description 给你N个数,X0-X(N-1) 执行Q个查询 三种格式 I p v Xp= v ...

  6. HDU 3234 Exclusive-OR(并查集)

    转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove 题目:给出N个数,给出一些条件, ...

  7. HDU 5606 tree 并查集

    tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ans​i​​=size[findset(i)],size表示每个并 ...

  8. hdu 1116 欧拉回路 并查集 一组字符串能否首尾相连成一个字符串

    主要是欧拉回路的基础知识,用并查集加工处理 注意欧拉回路和并查集的细节判断 不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间 #include <stdio.h> #inclu ...

  9. hdu 3038(种类并查集)

    题目大意:有n次询问,给出a到b区间的总和,问这n次给出的总和中有几次是和前面已近给出的是矛盾的 解题思路:这道题第一次接触很难往并查集方向去思考.这里使用的并查集很灵活,不仅仅要记录其父亲节点,同时 ...

最新文章

  1. C中 #define
  2. jfinal为weebox弹出框传递参数
  3. ubuntu挂载windows下的文件目录的步骤
  4. c#winform使用WebBrowser 大全[超长文转载]
  5. 编译vuejs html,VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
  6. Linux内核学习-字符设备驱动学习(二)
  7. 查找nginx安装的路径
  8. Jmeter工作原理
  9. 通俗易懂的Monte Carlo积分方法(二)
  10. 机房计算机组网方案,网络机房测试方案
  11. MATLAB连接API接口
  12. java求闰年_JAVA中怎么计算闰年
  13. [Realtek sdk-3.4.14b]升级iptables以支持IPv6 DHCPV6 NAT6的MASQUERADE属性(原厂默认iptables不支持NAT6)
  14. 8.3 Convex combinations (凸组合)
  15. MASM32编程获取任务栏高度
  16. 微信支付整理 (微信公众号支付)
  17. 计算机组成原理复习要点与考题类型--选择-填空-分析-计算-简答
  18. 手机QQ与Win8:一蠢再蠢的改版与回炉
  19. html5 xml在线编辑,XML 编辑器
  20. JavaScript声明和使用变量

热门文章

  1. 转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]
  2. c语言115写成16进制,西安电子科技大学计算机导论与C语言程序设计 计算机文化概论.pdf...
  3. 基础编程题目集 7-1 厘米换算英尺英寸 (15 分)
  4. 二叉树——求先序排列(洛谷 P1030)
  5. PAT乙级(1029 旧键盘)
  6. 神经网络优化——学习率
  7. python中keyboardinterrupt_为什么我不能在python中处理KeyboardInterrupt?
  8. python调用脚本_3种python调用其他脚本的方法
  9. php jquery选中提交,如何使用jquery提交php发布数据
  10. 2020年11月国产数据库排行: PingCAP融资破记录,PolarDB登云巅,达梦南大壮心雄