并查集主要用于合并两个集合、查找两个元素是否属于同一集合。
主要想法是建立一个集合数字的哈希表,表中保存当前数字的祖宗节点,若祖宗节点相同,表示它们是一个集合。合并两个集合只需要将它们的祖宗节点设置为同一个即可(将其中一个集合的祖宗节点的祖宗节点设置为另一个集合的祖宗节点,这样保证集合下所有子节点都能合并为一个祖宗节点的节点)。
(1)朴素并查集:
1 | int p[N]; //存储每个点的祖宗节点 |
(2)维护size的并查集:
1 | int p[N], size[N]; |
(3)维护到祖宗节点距离的并查集:
1 | int p[N], d[N]; |