首页 > 试题广场 >

集合合并

[编程题]集合合并
  • 热度指数:2487 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
给定若干个32位int数字集合,每个集合中的数字无重复,譬如:
  {1,2,3}  {2,5,6}  {8}
将其中交集不为空的集合合并,保证合并完成后所有集合之间无交集,输出合并后的集合个数以及最大集合中元素的个数。

输入描述:
输入格式:
1. 第一行为一个数字N,表示集合数。
2. 接下来N行,每行一个非空集合,包含若干个数字,数字之间用空格分开。
假设第i个集合的大小为Si,数据满足N<=100000,ΣSi<=500000


输出描述:
输出格式:
1. 第一行为合并后的集合个数。
2. 第二个为最大集合中元素的个数。
示例1

输入

3
1 2 3
2 5 6
8

输出

2
5
头像 bandiaoz
发表于 2024-12-28 21:52:05
解题思路 这是一道并查集问题,主要思路如下: 数据结构: 使用并查集维护集合关系 使用 map 对数字进行离散化处理 使用 vector 存储每个集合的元素 处理步骤: 读入每个集合的元素并进行离散化 对每个集合内的元素进行合并 统计最终的集合数量和最大集合大小 关键点: 使用 展开全文