hduoj1213(并查集)
2016-04-20 12:32
393 查看
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 22188 Accepted Submission(s): 11026
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.
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
题解:有关系的加到一个集合中。
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 22188 Accepted Submission(s): 11026
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.
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<cstdio> using namespace std; int pre[1005]; int cnt; int n,m; void makeset(){ int i; for(i=1;i<=n;i++) pre[i]=i; cnt=n; } int find(int x){ if(x!=pre[x]) x=find(pre[x]); return pre[x]; } void uniun(int a,int b){ int fx=find(a); int fy=find(b); if(fx!=fy){ pre[fx]=fy; cnt--; } return; } int main(){ int t,i; scanf("%d",&t); int a,b; while(t--){ scanf("%d%d",&n,&m); makeset(); for(i=0;i<m;i++){ scanf("%d%d",&a,&b); uniun(a,b); } printf("%d\n",cnt); } return 0; }
相关文章推荐
- set/multiset_01
- 666
- HTML4+CSS2与HTML5+CSS3区别
- sdut2880
- ListView的滑动删除
- 在Activity/Fragment以外使用Toast(涉及到对context上下文的理解与运用)
- 网易webapp 通过js计算html的font-size
- asp.net web api 解决ajax跨站点post请求提交 json 数据问题
- 如何获得Windows 8.1中已记住的WIFI的明文密码
- Java怎样处理EXCEL的读取
- 如何做到元素相对于父级的垂直居中
- HDU1160 FatMouse's Speed
- struts2 验证框架validation.xml不起作用的原因
- 钩子(hook)编程
- 隐式类型转换
- Mercurial (hg) Hook : PHP Syntax Check , hg 代码检测 钩子
- Django笔记 二级子域名配置
- Android中的自定义注解(反射实现-运行时注解)
- Count the Colors
- ios开发多线程篇——GCD介绍