
并查集
Disjoint Union Set树状数据结构
努力的老周
一个老码农,中年大叔。打过工,做过老板。
现有神兽一枚,努力培养神兽中。
展开
-
并查集——(四)C++ 并查集模板
推荐使用的并查集模板。#include <vector>template <class T>struct _DISJOINTSET { /* 当_ds[x]<0的时候,说明x的父节点是自己。同时 |_ds[x]| 表示集合内元素数量 当_ds[x]>0的时候,表示父节点 */ vector<T> _ds;//并查集 _DISJOINTSET(T n) { _ds = vector&原创 2020-11-03 13:46:07 · 299 阅读 · 0 评论 -
洛谷题解——P2814 家谱
题目相关题目链接洛谷,https://www.luogu.com.cn/problem/P2814。MYOJ,http://47.110.135.197/problem.php?id=5344。题目描述给出充足的父子关系,请你编写程序找到某个人的最早的祖先。输入格式输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用原创 2020-09-29 18:40:02 · 564 阅读 · 0 评论 -
洛谷题解——P1621 集合
题目相关题目链接洛谷,https://www.luogu.com.cn/problem/P1621。MYOJ,http://47.110.135.197/problem.php?id=5342。题目描述Caima 给你了所有 [a,b] 范围内的整数。一开始每个整数都属于各自的集合。每次你需要选择两个属于不同集合的整数,如果这两个整数拥有大于等于 p 的公共质因数,那么把它们所在的集合合并。重复如上操作,直到没有可以合并的集合为止。现在 Caima 想知道,最后有多少个集合。原创 2020-09-29 13:22:29 · 1016 阅读 · 0 评论 -
AtCoder题解——ACL Beginner Contest——C - Connect Cities
题目相关题目链接AtCoder ACL Beginner Contest C题,https://atcoder.jp/contests/abl/tasks/abl_c。Problem StatementThere are N cities numbered 1 through N, and M bidirectional roads numbered 1 through M. Road i connects City Ai and City Bi.Snuke can perform原创 2020-09-28 15:58:23 · 571 阅读 · 0 评论 -
并查集——(三)C++ 使用 STL 的 map 实现查并集功能
综述我们接上一节,https://blog.youkuaiyun.com/justidle/article/details/108846236,继续讨论并查集问题。我们发现使用 C++ 数组实现并查集主要问题有以下几个:1、元素中不能支持负数。因为 C++ 规定数组的下标不能是负数。2、代码量相对比较大。实现并查集代码量相对有点大。使用 map 实现并查集我们可以使用 STL 的 map 这个数据结构来实现。map 本生就是两个数据的映射关系,天生就具有并查集的特点。而且 map 可以支持负数。原创 2020-09-28 14:20:19 · 3608 阅读 · 0 评论 -
并查集——(二)C++ 使用数组实现查并集功能
使用限制使用数组表示查并集只能表示非负数。因为 C++ 规定数组的下标不能小于零。数据定义我们要根据题目的数据大小进行定义数组的大小。这里我们使用 0 ~ 1e5 的范围。const int MAXN=1e5+4;int parent[MAXN];初始化主要目的是将 parent 数组的值初始化为 -1,表示每个元素的父节点为自己。void init() { memset(parent, -1, sizeof(parent);}查询查询元素 x 的父节点序原创 2020-09-28 11:49:29 · 1279 阅读 · 0 评论 -
并查集——(一)概述
并查集概念在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。并查集数据结构表示常用的并查集实现有两种方法。使用数组我们使用数组来表示这样的数据结构。比如,我们知道这个集合最大元素个数为 10^5 个,也就是 1 ~ 10^5。那么我们可以定义一个数组来记录每个元素的父节点。const int MAXN=1e5+4;int parent[MAXN];memset(parent, -1, sizeof(parent))原创 2020-09-28 11:11:51 · 409 阅读 · 0 评论