hdoj1213 How many tables?(并查集)
2015-07-29 21:29
411 查看
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18166 Accepted Submission(s): 8943
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 【代码】[code]#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define maxn 1100 int N,M,sum; int per[maxn]; void init() { for(int i=1;i<=N;i++) per[i]=i; } int find(int x) { if(x==per[x]) return x; return per[x]=find(per[x]); } void join(int a,int b) { int fa=find(a); int fb=find(b); if(fa!=fb) per[fa]=fb; } int main() { int T,A,B; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); init(); while(M--) { scanf("%d%d",&A,&B); join(A,B); } sum=0; for(int i=1;i<=N;i++) if(i==per[i]) sum++; printf("%d\n",sum); } return 0; }
[/code]
相关文章推荐
- 设计模式之设计原则学习
- [UVA1595]Symmetry
- 【交换安全】DAI - Dynamic ARP Inspection 详解
- DEC6713开发板的摸索(1)
- JavaScript replaceall 方法
- 《现代操作系统》精读与思考笔记 第二章 进程和线程
- 进程管理(3-4)
- HDU 1074 Doing Homework(状压dp)
- 数据结构之---C语言实现图的十字链表存储表示
- madplay系统移植
- Snail—UI学习之弹出按钮选择项UIActionSheet
- 1272 小希的迷宫
- 现场手写编程strstr/strcpy
- log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)
- quick Cocos2d-x lua 八方向摇杆代码实现
- 每天一个linux命令(15):tail 命令
- Java(07—29)学习总结
- Jsoup解析HTML获取数据
- 《STL源码剖析》学习笔记(二)
- SharePoint 2013 内容部署报错