并查集 Dear 丶 2021-11-11 08:04 372阅读 0赞 **例题:** ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判断后面输入的电脑编号是否连接;当输入‘I’时,把后面输入的电脑编号连接;当输入是‘S’时,停止输入结束,输出这n台电脑是否形成网络; **主函数** int main() { int s[100]; int n; char a; scanf("%d",&n); for(i=0;i<n;i++) //初始化; s[i]=-1; while(~scanf("%c",&a)&&a!='S') { if(a=='I') input(s); else if(a=='C') check(s); else judge(s,n); } return 0; } **把某两个元素连接起来** void input(int s[]) { int u,v; scanf("%d %d",&u,&v); int r1=find1(s,u-1); int r2=find1(s,v-1); if(r1!=r2) { guibing(s,r1,r2); } } **查找某个元素属于哪个并查集** 1、正常查询 int find1(int s[],int k) { while(s[k]>=0) { k=s[k]; } return k; } 2、压缩路径查询 int find2(int s[],int k)//实现了路径压缩; { if(s[k]<0) return x; else return s[x]=find2(s,s[k]); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDE5MDE2_size_16_color_FFFFFF_t_70] **把两个元素所在的并查集归并成一个并查集** 1、普通归并 void guibing(int s[],int r1,int r2) { s[r1]=r2; } 2、桉树高归并 void anzhiguibing1(int s[],int r1,int r2)//桉树高进行归并 { if(s[r1]<s[r2]) { s[r2]=r1; } else if(s[r1]<s[r2]) { s[r1]=r2; } else { s[r2]=r1; s[r1]--; } } 3、按规模归并 void anzhiguibing2(int s[],int r1,int r2)//按规模归并 { if(s[r2]<s[r1]) { s[r2]=s[r2]+s[r1]; s[r1]=r2; } else { s[r1]=s[r2]+s[r1]; s[r2]=r1; } } **判断两个元素之间是否已连接** void check(int s[]) { int u,v; scanf("%d %d",&u,&v); int r1,r2; r1=find1(s,u-1); r2=find1(s,v-1); if(r1==r2) printf("yes\n"); else printf("no\n"); } **判断整个系统是否已合并为一个并查集** void judge(int s[],int n) { int i; int count=0; for(i=0;i<n;i++) { if(s[i]==-1) count++; } if(count==1) printf("The network is connected.\n"); else printf("There are %d components.\n",count); } [20190805122001677.png]: /images/20211109/bf20c4a7af0a4aa9886a41ae1f52fe4c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDE5MDE2_size_16_color_FFFFFF_t_70]: /images/20211109/4ce76dd45291446ea2e94c0b8e6ae6a0.png
相关 并查集 Ⅱ \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: T 古城微笑少年丶/ 2022年08月03日 14:35/ 0 赞/ 258 阅读
相关 并查集 并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组 落日映苍穹つ/ 2022年06月16日 12:44/ 0 赞/ 295 阅读
相关 并查集 这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的 港控/mmm°/ 2022年06月13日 14:13/ 0 赞/ 279 阅读
相关 并查集 > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签 Myth丶恋晨/ 2022年06月08日 09:24/ 0 赞/ 293 阅读
相关 并查集 森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是 Love The Way You Lie/ 2022年04月17日 02:27/ 0 赞/ 348 阅读
相关 并查集 来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性 我就是我/ 2022年03月29日 10:58/ 0 赞/ 346 阅读
相关 并查集 > 并查集是一种树形的数据结构,用于集合的合并。 与C++STL相比的优势: 1. 可以同时维护多个集合 2. 快速的合并两个集合 \\现实: 用数组实现。fat 左手的ㄟ右手/ 2022年02月05日 00:23/ 0 赞/ 242 阅读
相关 并查集 例题: ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判 Dear 丶/ 2021年11月11日 08:04/ 0 赞/ 373 阅读
相关 并查集 一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S 桃扇骨/ 2021年09月14日 02:56/ 0 赞/ 452 阅读
相关 并查集 并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a 比眉伴天荒/ 2021年06月22日 15:37/ 0 赞/ 544 阅读
还没有评论,来说两句吧...