HDU - 1213 How Many Tables 解题报告
来源:互联网 发布:爱乐软件 编辑:程序博客网 时间:2024/06/05 14:45
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17994 Accepted Submission(s): 8853
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
有t组数据,每组数据开头为m,n。表示有m个人,下面n行表示a,b相互认识,认识可以传递,即a认识b,b认识c,那么a就认识c。认识的人可以用同一张桌子,问一共需要多少张桌子。
题解:
将认识的人归为一组,可以用并查集解决。
参考代码:
#include<stdio.h>#include<string.h>#define N 1005int father[N];int f(int n){return father[n]==n?n:father[n]=f(father[n]);} void merge(int x,int y){int fx,fy;fx=f(x);fy=f(y);if(fx!=fy)father[fx]=fy;}int main(){int t;scanf("%d",&t);while(t--){int m,n,a,b,sum;sum=0;for(int i=1;i<N;i++) father[i]=i;scanf("%d%d",&m,&n);for(int i=0;i<n;i++){scanf("%d%d",&a,&b);merge(a,b);}for(int i=1;i<=m;i++){if(father[i]==i)sum++;}printf("%d\n",sum);}return 0;}
0 0
- HDU - 1213 How Many Tables 解题报告
- How Many Tables(解题报告)
- How Many Tables解题报告
- HDU1213 How Many Tables 解题报告
- hdu 1213 how many tables
- hdu 1213 How Many Tables
- hdu 1213 How Many Tables
- HDU 1213 How Many Tables
- hdu 1213 How Many Tables
- HDU 1213 How Many Tables
- hdu 1213 How Many Tables
- Hdu 1213 How Many Tables
- hdu 1213 How Many Tables
- hdu 1213 How Many Tables
- HDU 1213 how many tables
- hdu 1213 How Many Tables
- hdu 1213how many tables
- hdu 1213 How Many Tables
- 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片
- nyoj 2 括号配对问题
- xmlns(xml命名空间)
- MFC 多屏显示
- stack栈
- HDU - 1213 How Many Tables 解题报告
- cocos2dx中的屏幕适配
- 如何用报表解决销售工作衡量问题
- 类加载器的工作原理
- 用GDB调试程序
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 六种基本排序方式
- IBM AppScan官方帮助文档错别字缺陷,IBM的测试人员也太粗心了吧
- POJ 4046 - Sightseeing(最短路‘spfa)