- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并查集--李昊桦
不相交集合-并查集 李昊桦 例一:犯罪团伙 警察抓到了n个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯罪团伙的成员之间直接或间接认识。有可能一个犯罪团伙只有一个人。 请你根据已知罪犯之间的关系,确定犯罪团伙的数量。已知罪犯的编号从1至n。 输入: 第一行:n(=10000,罪犯数量), 第二行:m(=100000,关系数量) 以下若干行:每行两个数:I 和j,中间一个空格隔开,表示罪犯i和罪犯j相互认识。 输出:一个整数,犯罪团伙的数量。 输入: 11 8 1 2 4 5 3 4 1 3 5 6 7 10 5 10 8 9 输出: 3 测试数据说明: n=1000,m=5000; 抽象算法 开始把n个人看成n个独立集合。 每读入两个有联系的人i和j,查找i和j所在的集合p和q,如果p和q是同一个集合,不作处理;如果p和q属于不同的集合,则合并p和q为一个集合。 最后统计集合的个数即可得到问题的解。 一类问题模型 需要将n个不同的元素划分成一组不相交的集合。开始时,每个元素自己成一个单元素集合,然后按照一定的顺序或问题给定的条件和要求将属于同一组元素(有特定关系)所在的集合合并,最后统计集合的个数往往就是问题的解。 在这个过程中要反复的用到查询某个元素属于哪个集合的运算;两个不同集合合并的运算。适合描述这类问题的抽象数据结构类型称为并查集(合并与查找)。 并查集一般以树形结构存储,多棵树构成一个森林,每棵树构成一个集合,树中的每个节点就是该集合的元素,找一个代表元素作为该树(集合)的祖先。 定义:father[x] : x的父亲节点。 1、Make_Set(x) 把每一个元素初始化为一个集合 初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身。 /* 初始化集合 */ void Make_Set(int x) { father[x] = x; } 2、Find_Set(x) 查找一个元素所在的集合 查找一个元素所在的集合,只要找到这个元素所在集合的祖先即可。判断两个元素是否属于同一集合,只要看他们所在集合的祖先是否相同即可。 int Find_Set(int x) /* 查找x元素所在的集合, */ { if (x != father[x]) return Find_Set(father[x]); return father[x]; } 3、Union(x,y) 合并x,y所在的两个集合 合并两个不相交集合的方法就是,找到其中一个集合的祖先,将另外一个集合的祖先指向它。 void Union(int x, int y) { x = Find_Set(x); y = Find_Set(y); if (x == y) return; else father[x] = y; } 并查集的优化 1、Find_Set(x)时 路径压缩 寻找祖先时我们一般采用递归查找,但是当元素很多亦或是整棵树变为一条链时,每次Find_Set(x)都是O(n)的复杂度 路径压缩:即当我们经过“递推”找到祖先节点后,“回归”的时候顺便将它的子孙节点都直接指向祖先,这样以后再次Find_Set(x)时复杂度就变成O(1)了。 int Find_Set(int x) /* 查找x元素所在的集合, */ { if (x != father[x]) return father[x]=Find_Set(father[x]); else return father[x]; } 例二 : 食物链 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。?现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。?有人用两种说法对这N个动物所构成的食物链关系进行描述:?第一种说法是1 X Y,表示X和Y是同类。?第二种说法是2 X Y,表示X吃Y。?此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。?1) 当前的话与前面的某些真的话冲突,就是假话;?2) 当前的话中X或Y比N大,就是假话;?3) 当前的话表示X
您可能关注的文档
- 北信检测12复习题.doc
- 北师大一下写字表字帖.doc
- 北师大六年级下第三周教案.doc
- 北师大版七年级数学 上期中考试及答案.doc
- 北师大版七年级数学上册期中考试检测题及答案.doc
- 北师大版七年级数学下知识要点.doc
- 北师大版三年级上册课本字词(必掌握).doc
- 北师大版七年级数学下册第六章变量之间的关系.doc
- 北师大版九年级上 《李凭箜篌引》ppt课件.ppt
- 北师大版五年级上册数学第一单元表格式教案.doc
- 2025届湖北省武汉市新洲区中考历史最后一模试卷含解析.doc
- 辽宁省丹东市第十四中学2025届中考冲刺卷生物试题含解析.doc
- 方兴大道承台砼施工技术交底.docx
- 江苏省扬州市田家炳实验中学2025届中考历史全真模拟试卷含解析.doc
- 2025届黑龙江省杜尔伯特县中考二模化学试题含解析.doc
- 海南省海口九中学海甸分校2025届中考生物模拟试卷含解析.doc
- 江苏省春城中学2025届中考生物全真模拟试卷含解析.doc
- 广东省广州市番禺区广博校2025届中考猜题历史试卷含解析.doc
- 安徽省合肥市重点中学2025届中考四模历史试题含解析.doc
- 河北省衡水市故城县2025届中考生物押题试卷含解析.doc
最近下载
- 小水滴的诉说公开课.pptx VIP
- 2025 届新高考高三第一次联考物理试卷(真题含答案解析).docx
- 《大数据金融》考试复习题库(含答案).docx
- 【GB_T51450-2022 】金属非金属矿山充填工程技术标准.docx
- 2024年贵州省高考地理真题试卷(含答案).docx VIP
- 小升初语文(部编版)真题汇编专题11划分节奏与句子分析.docx VIP
- 泵体的铸造工艺设计及模拟.doc
- 网课智慧树知道《温病学(浙江中医药大学)》章节测试答案.docx
- 合理饮食与规范作息.pptx VIP
- 第12课《终身学习持续发展》第2框《信息素养助力发展》-【中职专用】《心理健康与职业生涯》同步课堂课件.pptx
文档评论(0)