HDU1213 How Many Tables(基础并查集)
2016-05-26 10:55
309 查看
HDU1213 How Many Tables(基础并查集)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
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
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
题目
Time Limit: 1000ms Memory Limit: 32768KB
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
分析
并查集基础题,半年没写并查集,来道入门题练练手。开始刷图论500题了。源码
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<set> #include<map> #include<vector> #include<stack> #include<utility> #include<sstream> #define mem0(x) memset(x,0,sizeof x) #define mem1(x) memset(x,1,sizeof x) #define mem11(x) memset(x,-1,sizeof x) using namespace std; typedef long long ll; typedef unsigned long long ull; const int INF = 0x7fffffff; const int MAXN = 1e4+10; const int MOD = 1000000007; int f[MAXN]; int t,m,n; int findAnc(int x){ int tmp = x; while(f[tmp]!=tmp){ tmp = f[tmp]; } return tmp; } void unit(int a, int b){ int fa,fb; fa = findAnc(a); fb = findAnc(b); if(fa!=fb) f[fa] = fb; } int main(){ /*#ifdef LOCAL freopen("C:\\Users\\JuneLynn Bian\\Desktop\\in.txt","r",stdin); freopen(" C:\\Users\\JuneLynn Bian\\Desktop\\out.txt","w",stdout); #endif // LOCAL*/ cin >> t; while(t--){ cin >> n >> m; int a,b; for(int i = 1; i <= n; i++) f[i] = i; for(int i = 1; i <= m; i++){ cin >> a >> b; unit(a,b); } int cnt = 0; for(int i = 1; i <= n; i++) if(f[i]==i) cnt++; cout << cnt << endl; } return 0; }
相关文章推荐
- 使用Delphi收发GMail的邮件
- webrtc杂项
- Java开发人员学习路线
- beanstalkd消息队列
- boost::asio::steady_timer基础使用
- 选择排序
- HDU 2073 无限的路(模拟)
- svn中的解决代码冲突方法
- c语言开辟内存的问题
- Android onActivityResult获取返回值的用法
- 使用mp4v2将H264+AAC合成mp4文件
- 14行代码,爬完丁香园论坛首页
- python key and network mointor
- gulp构建指令
- 有线网卡和无线网卡同时上网
- Android studio设置logcat缓存的方法
- 图解VMware中安装CentOS以及win远程登录
- Java中的多线程你只要看这一篇就够了
- Delphi 的学习笔记十——数组
- HttpServletRequest 转换成MultipartHttpServletRequest