HDU1213 How Many Tables 【标准并查集】

How Many Tables

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 15359    Accepted Submission(s): 7525

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

并查集模板题,最终还是用了这个模板。。

#include <stdio.h>
#include <string.h>

#define maxn 1010

int pre[maxn];

int ufind(int x) {
	return pre[x] == -1 ? x : (pre[x] = ufind(pre[x]));
}

bool unite(int x, int y) {
	x = ufind(x);
	y = ufind(y);
	if (x == y) return false;
	pre[x] = y;
	return true;
}

int main() {
	freopen("stdin.txt", "r", stdin);
	int T, n, m, i, cnt, x, y;
	scanf("%d", &T);
	while (T--) {
		scanf("%d%d", &n, &m);
		memset(pre, -1, sizeof(int) * (n + 1));
		cnt = n;
		while (m--) {
			scanf("%d%d", &x, &y);
			if (unite(x, y)) --cnt;
		}
		printf("%d\n", cnt);
	}
	return 0;
}
时间: 2024-09-30 16:11:27

HDU1213 How Many Tables 【标准并查集】的相关文章

HDU1213 How Many Tables 【并查集】

How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13360    Accepted Submission(s): 6539 Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinn

HDU1213 How Many Tables【并查集】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 题目大意: N个朋友聚会,只有认识的人才会坐在一桌.给你M个朋友关系(A,B),表示A认识B.且认识 关系具有传递性.即如果A认识B,B认识C,那么A也认识C.所以A.B.C可以坐在一桌上. 那么问题来了:问:如果让认识的人坐一桌,那么最少要安排多少张桌子才能满足要求. 思路 : 直接能想到用并查集来做.对于所给认识关系(A.B),查找二人的父节点是否相同,不相同则并 为一个集合,相同说明之

【HDU1231】How Many Tables(并查集基础题)

什么也不用说,并查集裸题,直接盲敲即可. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cctype> 6 #include <cmath> 7 #include <algorithm> 8 #include <numeric> 9 using namespace s

HDU1213:How Many Tables(并查集)

How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 46694    Accepted Submission(s): 23319 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 Description: Today is Ignatius' birthda

Hdoj 1213 How Many Tables 【并查集】

How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16590 Accepted Submission(s): 8117 Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner tim

hdu 1213 How Many Tables(并查集的简单应用)

How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16333    Accepted Submission(s): 8012 Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinn

HDU 1213 How Many Tables (并查集)

How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22498 Accepted Submission(s): 11193 Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner ti

HDU 1213 How Many Tables(并查集)

传送门 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

How Many Tables(并查集)

How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17411    Accepted Submission(s): 8527点我 Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's din