hdu杭电1213 How Many Tables【并查集】
2015-07-29 17:43
375 查看
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
Sample Output
//找根节点的个数
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<stdio.h> int per[100010]; int find(int x) { if(x==per[x]) return x; return per[x]=find(per[x]); } void join(int x ,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { per[fx]=fy; } } int main() { int a,b,m,n,i; int t; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); for(i=1;i<=m;++i) { per[i]=i; } while(n--) { scanf("%d%d",&a,&b); join(a,b); } int res=0; for(i=1;i<=m;++i) { if(per[i]==i) ++res; } printf("%d\n",res); } return 0; }
相关文章推荐
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
- mac android eclipse 配置问题
- Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)
- python设计模式之访问者模式
- android-----JNI中的log打印
- 比分显示控件,自带两种动画
- iOS开发——动画编程OC篇&(二)核心动画
- Scala学习笔记(1)-类-var-val
- 抽屉定理poj 3370|| hdu1808 Halloween treats || hdu 1205 吃糖果 ||poj 2356
- Android打包失败Proguard returned with error code 1. See console
- memcache
- vector之reserve函数
- 防止CSRF跨域攻击
- socket编程——一个简单的例子
- 后台管理,给列表页新增查询功能,所遇到的问题及感想
- 几个简单的html+css+js题目
- shell命令行快速编辑命令
- $.post
- memcache
- Window下memcached安装与测试步骤