并查集 hdu1213 How Many Table 图论500题
来源:互联网 发布:网络兼职客服招聘 编辑:程序博客网 时间:2024/05/20 14:41
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34888 Accepted Submission(s): 17396
Problem Description
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strangers.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
Input
The input starts with an integer T(1<=T<=25) which indicate the number of test cases. Then T test cases follow. Each test case starts with two integers N and M(1<=N,M<=1000). N indicates the number of friends, the friends are marked from 1 to N. Then M lines follow. Each line consists of two integers A and B(A!=B), that means friend A and friend B know each other. There will be a blank line between two cases.
Output
For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.
Sample Input
25 31 22 34 55 12 5
Sample Output
24
题目大意:
题目描述的是在生日聚会上,为了保证任意另个相邻的人之间不是陌生人,求最少需要多少张桌子。
题目解析:
这是一个简单的并查集,就是一个模板题,当我看到这个题目的时候第一反应就是用并查集构建,最终求出要建几棵树就好了,很简单的
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;int p[1005];struct Edge{ int u,v;} edge[1005];int find(int x){ return x==p[x]?x:find(p[x]);}int main(){ //freopen("in.txt","r",stdin); int T; cin>>T; while(T--) { int m,n,cnt=0; cin>>n>>m; for(int i=0; i<=n; i++) p[i]=i; for(int i=1; i<=m; i++) { cin>>edge[i].u>>edge[i].v; int x = find(edge[i].u); int y = find(edge[i].v); if(x!=y) { p[x] = y; } } for(int i=1;i<=n;i++) { if(find(i)==i) cnt++; } cout<<cnt<<endl; } return 0;}
阅读全文
0 0
- 并查集 hdu1213 How Many Table 图论500题
- 【hdu1213】How Many Tables【并查集】
- How Many Tables hdu1213 并查集
- hdu1213(How Many Tables 并查集)
- Hdu1213 - How Many Tables - 并查集
- HDU1213 How Many Tables 【并查集】
- HDU1213 How Many Tables【并查集】
- HDU1213 How Many Tables 【并查集】
- hdu1213 How Many Tables(并查集)
- How Many Tables--hdu1213(并查集)
- HDU1213-How Many Tables 并查集
- HDU1213 How Many Tables - 并查集
- hdu1213 How Many Tables 并查集
- HDU1213 How Many Tables(并查集)
- HDU1213 How Many Tables 并查集
- hdu1213 How Many Tables 并查集
- HDU1213 How Many Tables(并查集)
- hdu1213 How many tables 并查集
- Math类与BigDecimal类
- Padding oracle attack!
- 文章标题
- C和指针之实现可变参数函数编译出现expanded from macro 'va_arg' #define va_arg(ap, type) 解决办法
- HTTP协议详解
- 并查集 hdu1213 How Many Table 图论500题
- 四周三次课(11月8日) 9.1 异常的常用形式和处理 9.2 Excepthion异常类 9.3 raise关键字的使用
- 微信红包拆红包效果
- Spring MVC自定义类型转换器
- 并查集 hdu 1272 小希的迷宫 图论500题
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- 几段代码让你彻底搞懂编码出现乱码问题(File类的几个读写文本问题)
- keepalived+nginx实现主备高可用
- 如何快速转发csdn博客?