HDU - 1213 How Many Tables(并查集)
2016-06-26 16:19
369 查看
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.
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
2
5 3
1 2
2 3
4 5
5 1
2 5
Sample Output
2
4
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.
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
2
5 3
1 2
2 3
4 5
5 1
2 5
Sample Output
2
4
#include <iostream> #include <cstring> #include <queue> #include <cmath> #include <cstdio> #include <algorithm> using namespace std; int pre[1005]; int _find(int x) { int r=pre[x]; while(r!=pre[r]) r=pre[r]; int i=x,j; while(r!=i) { j=pre[i]; pre[i]=r; i=j; } return r; } void mix(int x,int y) { int fx,fy; fx=_find(x); fy=_find(y); if(fx!=fy) pre[fx]=fy; } int main() { int c; cin>>c; while(c--) { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) pre[i]=i; while(m--) { int a,b; cin>>a>>b; mix(a,b); } int ans=0; for(int i=1;i<=n;i++) if(pre[i]==i) ans++; cout<<ans<<endl; } return 0; }
相关文章推荐
- 洛谷1006==codevs1169
- MBR和GPT概要学习
- 竖直时间轴之左右交叉布局
- 【Spring专题-④】拦截器浅析
- Finding where unmanaged exceptions came from
- 日常小结-SAX解析xml
- MBR和GPT概要学习
- ACM课程总结
- 面向对象5
- FAST解析JSON
- iOS中宏(define)/常量(const)/变量的理解
- Socket用法详解
- cmake 手册系列
- JNI javah cannot access android.app.Activity 处理方案
- mybatis xml中特殊字符处理
- 封装OKHttp
- Arduino连接超声波传感器测距
- Bluebird-Core API(二)
- Nginx location 匹配规则
- LeetCode-50.Pow(x, n)