并查集操作 小鱼儿 2021-09-21 06:06 313阅读 0赞 ## 并查集 ## > 并查集可以简单的看作是对集合的“合并和查找”。每一个元素都唯一属于一个集合,每一个集合都有唯一的一个根元素,来唯一标识这个集合。 如何储存元素? 可以用数组来存储元素,数组下标代表该元素,数组的值代表该元素的父元素。例如Father\[a\] = b。就代表a元素的父元素是b。 如何表示根元素? 规定一下,只要Father\[i\] = i ,则代表i为该集合的根元素。 并查集的两个基本操作就是查找和合并。查找:就是查找该元素的父元素。合并:合并两个集合,可以简化为合并两个集合的根节点。 查找操作 int findFather(int a){ //查找a元素的父元素 while(a != father[a]){ a = father[a]; } return a; } 合并操作 void Union(int a, int b){ int fatherA = findFather(a); int fatherB = findFather(b); if(fatherA != fatherB){ father[a] = b; } } 并查集的两种常见的问题是:1)求集合数 2)求每个集合中的元素个数 这两种问题都可以通过一个数组来解决。 对于求集合数,可以开一个布尔型的数组isRoot,数组的初始的值都为false。在进行完合并的操作之后。遍历一下所有的元素的父元素,标记为true即可。 for(int i=1; i<=n; i++){ isRoot[findFather[i]] = true; } int ans = 0; for(int i=1; i<=n; i++){ ans += isroot[i]; } //ans的值就位集合的个数 对于求每一个集合中的元素个数,只需要将上面的isRoot数组的类型改为int型,初始化为0,然后在遍历每一个元素的父元素时累加即可。 for(int i=1; i<=n; i++){ isRoot[findFather[i]]++; } //isRoot[i] 的值代表以i为根节点的集合的元素的个数 并查集模板 #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1010; int n;//人数 int father[maxn]; int isRoot[maxn]={ 0}; //初始化 void initialize(int n){ for(int i=1; i<=n; i++){ father[i] = i; } } //查找根元素 int find_Father(int x){ int a = x; while(x != father[x]){ x = father[x]; } //路径压缩 while( a != father[a]){ int t = father[a]; father[t] = x; a = father[a]; } return x; } //合并 void Union(int a, int b){ int fatherA = find_Father(a); int fatherB = find_Father(b); if(fatherA != fatherB){ father[fatherA] = fatherB; } }
相关 并查集 Ⅱ \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: T 古城微笑少年丶/ 2022年08月03日 14:35/ 0 赞/ 277 阅读
相关 并查集 并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组 落日映苍穹つ/ 2022年06月16日 12:44/ 0 赞/ 314 阅读
相关 并查集 这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的 港控/mmm°/ 2022年06月13日 14:13/ 0 赞/ 300 阅读
相关 并查集 > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签 Myth丶恋晨/ 2022年06月08日 09:24/ 0 赞/ 308 阅读
相关 并查集 森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是 Love The Way You Lie/ 2022年04月17日 02:27/ 0 赞/ 366 阅读
相关 并查集 来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性 我就是我/ 2022年03月29日 10:58/ 0 赞/ 370 阅读
相关 并查集 例题: ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判 Dear 丶/ 2021年11月11日 08:04/ 0 赞/ 387 阅读
相关 并查集操作 并查集 > 并查集可以简单的看作是对集合的“合并和查找”。每一个元素都唯一属于一个集合,每一个集合都有唯一的一个根元素,来唯一标识这个集合。 如何储存元素? 可以用数 小鱼儿/ 2021年09月21日 06:06/ 0 赞/ 314 阅读
相关 并查集 一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S 桃扇骨/ 2021年09月14日 02:56/ 0 赞/ 474 阅读
相关 并查集 并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a 比眉伴天荒/ 2021年06月22日 15:37/ 0 赞/ 571 阅读
还没有评论,来说两句吧...