HDOJ 1213 how many tables (并查集)
2015-08-20 19:49
302 查看
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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.
[align=left]Output[/align]
For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.
[align=left]Sample Input[/align]
2
5 3
1 2
2 3
4 5
5 1
2 5
[align=left]Sample Output[/align]
2
4
//我和你是朋友,你和他是朋友,那么我和他也是朋友........我的朋友真多啊,是朋友就坐到一起,不是的只能独自一人坐在一起了
,问最多需要几个桌子。和畅通工程的代码如出一辙啊
#include<cstdio> int per[1100]; //int k; int find(int x) { int t=x; while (t!=per[t]) t=per[t]; per[x]=t; return t; } void un(int a,int b) { int xa=find(a); int xb=find(b); if (xa!=xb) per[xa]=xb; } int main() { int n,m,t; scanf ("%d",&t); while (t--) { while (scanf ("%d%d",&n,&m)!=EOF) { for (int i=1;i<=n;i++) per[i]=i; int x,y; while (m--) { scanf ("%d%d",&x,&y); un(x,y); } int k=0; for (int i=1;i<=n;i++) { if (per[i]==i) k++; } printf ("%d\n",k); } } return 0; }
搜索
相关文章推荐
- Oracle 学习之性能优化(九)使用hint
- LintCode-N皇后问题
- Unity Asset(5)iTween
- zoj 2112 块状链表 OR 线段树套treap 求动态第k大
- 运行级别
- 文件乱码的解决办法
- CRB and His Birthday(HDUOJ--5410
- 关于Java的10个谎言
- MAVEN 创建普通项目
- 竞价账户烧钱的七大原因和处理办法
- 第四周第四天
- 矩形A + B
- Mac使用zsh后多次执行`source .bash_profile`解决方案
- 15个顶级Java多线程面试题及回答
- BZOJ 2219 数论之神 BSGS+CRT
- 相同生日概率(经典问题)
- HDU 4341 分组背包
- (笔试题)镇长选举
- 调试界面利器 reveal
- Java字符串的10大热点问题盘点