hdu1213 How Many Tables
来源:互联网 发布:怎样使用趣味编程软件 编辑:程序博客网 时间:2024/05/03 11:03
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19795 Accepted Submission(s): 9856
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
与hdu1232大同小异,求连通分量个数。
#include<iostream>#include<stdio.h>#include<cmath>#include<algorithm>#include<string>#include<cstring>#include<string.h>#include<map>#include<queue>#include<list>#include<stack>#include<cctype>#include<fstream>#include<sstream>#include<iomanip>#include<set>#include<vector>#include<cstdlib>#include<time.h>using namespace std;int p[1005];int find(int x){ if (x != p[x]) p[x] = find(p[x]); return p[x];}void unio(int x, int y){ int px = find(x); int py = find(y); if (px == py) return; p[px] = py;}void make(int x){ for (int i = 1; i <= x; i++) p[i] = i;}int main(){ int n, m; int t; scanf("%d", &t); while (t--) { scanf("%d", &n); scanf("%d", &m); int a, b; make(n); for (int i = 1; i<= m; i++) { scanf("%d%d", &a, &b); if (find(a) != find(b)) unio(a, b); } int s = 0; for (int i = 1; i <= n; i++) { if (p[i] == i) s++; } printf("%d\n", s); } return 0;}
- HDU1213:How Many Tables
- HDU1213--How Many Tables
- hdu1213-How Many Tables
- hdu1213 How Many Tables
- hdu1213 How Many Tables
- HDU1213 How Many Tables
- hdu1213 How Many Tables
- How Many Tables hdu1213
- HDU1213---How Many Tables
- hdu1213 How Many Tables
- hdu1213 How Many Tables
- HDU1213 How Many Tables
- hdu1213 How Many Tables
- [hdu1213] How Many Tables
- HDU1213-How Many Tables
- hdu1213 How Many Tables
- HDU1213 How Many Tables
- HDU1213 How Many Tables
- JavaScript String 字符串类型
- RMI通讯
- J2EE开发技术点1:Tomcat中开发项目
- SOUI中自定义窗口不能适应图片大小问题解决
- [ git ] eclipse如何与git 配合工作。
- hdu1213 How Many Tables
- 快速排序
- C++自学历程——启程篇
- swift 快速奔跑的兔几 本节的内容是:基于文档的应用程序
- 南大软院大神养成计划--day11
- leetcode_Word Pattern
- C++中模板类声明和实现能否分离?
- hdoj2068RPG的错排【错排公式+组合数】
- Servlet生成JSP页面验证码