并查集(Union-Find)

水深无声 2021-12-20 06:29 298阅读 0赞

Date:2019-06-23 13:42:53

  1. 1 //定义
  2. 2 int father[N]; //father[1]=2,即2是1的父亲,根结点用father[i]=i表示
  3. 3
  4. 4 //初始化
  5. 5 for(int i=1; i<=N; i++)
  6. 6 father[i]=i; //初始时有N个独立的集合
  7. 7
  8. 8 //查找
  9. 9 //对于给定的结点,寻找其根结点
  10. 10 int Find(int x)
  11. 11 {
  12. 12 if(father[x] == x)
  13. 13 return x;
  14. 14 Find(father[x]);
  15. 15 }
  16. 16
  17. 17 //合并
  18. 18 void Union(int a, int b)
  19. 19 {
  20. 20 int fa = Find(a);
  21. 21 int fb = Find(b);
  22. 22 father[fb] = fa; //不能用father[a]=b
  23. 23 Find2(b); //将fb中的结点更新至fa
  24. 24 }
  25. 25
  26. 26
  27. 27 //路径压缩
  28. 28 //把当前查询结点的路径上所有的结点的父亲都指向根结点
  29. 29 int Find2(int x)
  30. 30 {
  31. 31 int r = x;
  32. 32 while(x != father[x])
  33. 33 x = father[x];
  34. 34 //此处x已经是根结点
  35. 35 while(r != father[r])
  36. 36 {
  37. 37 int z = r;
  38. 38 r = father[r];
  39. 39 father[z] = x;
  40. 40 }
  41. 41 }
  42. 42
  43. 43 //递归写法
  44. 44 int Find2(int x)
  45. 45 {
  46. 46 if(x == father[x])
  47. 47 return x;
  48. 48 fathre[x] = Find2(father[x]);
  49. 49 }

转载于:https://www.cnblogs.com/blue-lin/p/11072511.html

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组

    相关

    这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的

    相关

    > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签

    相关

    森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是

    相关

    来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性

    相关

    > 并查集是一种树形的数据结构,用于集合的合并。 与C++STL相比的优势: 1. 可以同时维护多个集合 2. 快速的合并两个集合 \\现实: 用数组实现。fat

    相关

    例题: ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判

    相关

    一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S

    相关

    并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a