并查集模板

Posted 努力努力再努力x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集模板相关的知识,希望对你有一定的参考价值。

关于并查集的原理这里就不加阐述,参考博文:https://www.tuicool.com/articles/Zb2qYzj

 1 int a[maxn];
 2 int fa[maxn];
 3 void UFinit(int x)//并查集的初始化
 4 {
 5     for(int i = 0; i < x; i++)fa[i] = -1;
 6 }
 7 int Find(int x)//查找并返回节点x所属集合的根节点
 8 {
 9     int s;//查找位置
10     for(s = x; fa[s] >= 0; s = fa[s]);//查找到父节点为负数,此时s为根节点
11     while(s != x)//路径压缩
12     {
13         int tmp = fa[x];
14         fa[x] = s;
15         x = tmp;
16     }
17     return s;
18 }
19 void Union(int x, int y)//x,y属于不同的两个集合,现在合并这两个集合
20 {
21     x = Find(x);//x变成原来x的根节点
22     y = Find(y);//y变成原来y的根节点
23     int tmp = fa[x] + fa[y];//两个集合结点个数之和(负数)
24     //如果y所在集合结点个数 > x所在集合结点个数(负数)
25     if(fa[x] > fa[y])
26     {
27         fa[x] = y;//将根节点x所在的树作为y的子树
28         fa[y] = tmp;//更新y的结点个数
29     }
30     else
31     {
32         fa[y] = x;//将根节点y所在子树作为x的子树
33         fa[x] = tmp;//更新x的结点个数
34     }
35 }

 

以上是关于并查集模板的主要内容,如果未能解决你的问题,请参考以下文章

Tarjan 模板,高级并查集

并查集题目模板及java代码

并查集模板(洛谷——模板并查集)

并查集模板

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

ybtoj并查集例题1模板并查集