Problem 2078 --算法6-8~6-11:用树表示的等价问题

2078: 算法6-8~6-11:用树表示的等价问题

"
Time Limit $1$ 秒/Second(s) Memory Limit $512$ 兆字节/Megabyte(s)
提交总数 $17$ 正确数量 $14$
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签 数据结构
在离散数学中,对等价关系和等价类的定义是:
如果集合S中的关系R是自反的、对称的和传递的,则称它为一个等价关系。
等价关系是现实世界中广泛存在的一种关系,许多应用问题可以归结至等价类问题,这类问题通常被称为等价问题。
通过使用集合,能够解决等价问题。而集合可以通过双亲表示法的树结构进行保存。通过对树结构的操作,可以实现查找、归并等操作。查找操作和归并操作的算法如下:
在以上的归并操作中,由于表示集合的树的深度与树形成的过程有关,因此在最坏情况下全部归并操作将会有O(n2)的复杂度。而通过在归并时比较子集所含成员的数目,令成员少的归并至成员多的集合,将能够提高算法的效率。下面给出优化的归并操作算法:
另外,通过增加“压缩路径”的功能,即将所有从根到相应元素路径上的元素都变成树根的孩子。算法如下所示:
本题中,将会给出n个原本互不相交的集合及k次集合合并的操作。通过这k次合并,判断最终的某两个原始的集合是否被合并成了同一个集合。

输入的第一行包含两个用空格隔开的正整数n和k,其中n不超过100,k不超过n-1。
之后的k行中,每行包含两个用空格隔开的正整数x和y,表示将x元素所在的集合和y元素所在的集合合并至同一个集合。保证x和y均在1至n之间。
最后一行中,包含两个正整数,表示需要判断是否在同一个集合的元素编号。
共一行,包含字符串“YES”或“NO”,“YES”表示需判断的元素在同一个集合中,“NO”表示不在同一个集合中。请注意不需要输出引号,且行尾输出换行。
5 2
1 3
2 3
1 2
YES
以集合为基础结构的抽象数据类型可以有多种实现方法,比如用位向量表示集合或者用有序表表示集合等等。而如何高效的实现以集合为基础的抽象数据类型,取决于该集合的大小以及对此集合所进行的操作。
在本题中实现的MFSet抽象数据结构,又被称为并查集,是一种能够非常高效的实现集合的合并、查询等操作的数据结构。

推荐代码 查看2078 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[$0 $ms] 大喵-sama 899723 2022-10-10 13:12:05
内存最少[$944 $KB] 李彪@计算机科学与技术172 256022 2018-05-31 08:12:47
第一AC 范晋豪@信息与计算科学142 152714 2017-11-16 15:10:15
第一挑战 范晋豪@信息与计算科学142 152714 2017-11-16 15:10:15

赛题来源/所属竞赛 数据结构高分笔记 数据结构高分笔记

竞赛编号 竞赛名称 竞赛时间 访问比赛
1149 2017-2018-2《C语言程序设计II》课下练习@2017计算机科学与技术123 2018-03-06 12:00:00 请登录