杭电-1213 How Many Tables?(并查集模板)
2016-08-01 13:49
288 查看
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24309 Accepted Submission(s): 12161
[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
[align=left]Author[/align]
Ignatius.L
[align=left]Source[/align]
杭电ACM省赛集训队选拔赛之热身赛
[align=left]Recommend[/align]
Eddy | We have carefully selected several similar problems for you: 1272 1856 1325 1233 1198
AC代码:
#include<stdio.h> int a[1100]; int find(int p) { while(p!=a[p]) { p=a[p]; } return p; } void hebing(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) a[fx]=a[fy]; } int main() { int n,m,t; int u,v,i; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { a[i]=i; } for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); if(find(u)!=find(v)) hebing(u,v); } int ans=0; for(i=1;i<=n;i++) { if(a[i]==i) ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- acm杭电HDU1232畅通工程 并查集 模板题
- 杭电ACM省赛集训队选拔赛之热身赛-How Many Tables,并查集模板题~~
- 杭电-1232 畅通工程(并查集模板)
- 1073 家族(并查集模板)
- hdu杭电2120 Ice_cream's world I【并查集】
- 【2802】SDUTOJ (并查集模板水题2)
- 并查集模板
- POJ 2524 宗教信仰 并查集 基础模板
- 并查集简介及模板
- hdu 1856 More is better 并查集模板题
- UFS并查集 模板
- 杭电1232(纯粹并查集)
- 我对并查集的了解及模板
- 并查集--hdu1232(基本模板题)
- 杭电3549 Flow Problem(最大流Dinic+前向星模板)
- 杭电 hdu 1213 How Many Tables (并查集,简单题)
- 2017杭电ACM集训队单人排位赛 - 2 -1002 地狱飞龙 (辛普森公式求积分)(模板)
- 【NOIP模板】 并查集
- kruskal模板及例题(并查集)
- 并查集-杭电1232-畅通工程-难度1