hdu 1213 How Many Tables 并查集
2015-08-17 14:31
429 查看
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
Author
Ignatius.L
Source
杭电ACM省赛集训队选拔赛之热身赛
A 与B认识,B与C认识,,则A与C也认识。。
同一桌的人都认识。。
问要多少桌。。。
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
Author
Ignatius.L
Source
杭电ACM省赛集训队选拔赛之热身赛
A 与B认识,B与C认识,,则A与C也认识。。
同一桌的人都认识。。
问要多少桌。。。
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<map> #include<stack> #pragma comment(linker,"/STACK:102400000,102400000") #define pi acos(-1.0) #define EPS 1e-6 #define INF (1<<24) using namespace std; int father[1005]; int findfather(int x) { if(x!=father[x]) father[x]=findfather(father[x]); return father[x]; } void Uion(int x,int y) { int a=findfather(x); int b=findfather(y); father[a]=b; } int main() { int T; scanf("%d",&T); while(T--) { int a,b,m,n,i; scanf("%d %d",&n,&m); for(i=1;i<=n;i++) father[i]=i; for(i=0;i<m;i++) { scanf("%d %d",&a,&b); Uion(a,b); } bool flag[1005]; memset(flag,false,sizeof(flag)); int cnt=0; for(i=1;i<=n;i++) { if(flag[findfather(i)]==true) continue; else { cnt++; flag[findfather(i)]=true; } } printf("%d\n",cnt); } return 0; }
相关文章推荐
- 设计模式-抽象工厂模式
- poj 1673 EXOCENTER OF A TRIANGLE
- Sensor HAL框架分析之二
- 四轴飞行器F450+Futaba 14SG+好盈电调油门行程校准
- STM32的NVIC理解
- [水晶报表]金额转英文大写
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- HDOJ 2046 骨牌铺方格 【递推】
- HDOJ 2046 骨牌铺方格 【递推】
- 串口的工作原理
- 使用jQuery+css实现选项卡切换功能
- 【动态规划】POJ2385-Apple Catching
- jquery动感漂浮导航菜单代码分享
- powerdesigner12.0版破解方法
- Ahui Writes Word
- Sensor HAL框架分析之一
- STM32固件库命名规则
- [Solution] ASP.NET Identity(2) 空的项目使用
- 判断URL中的中文参数是GB2312还是Utf-8编码
- 在950130000客服中心,细节即是修养