随笔分类 -  数据结构——并查集

摘要:题意 给定一个 $n$ 个结点有向图,求其中最小环的大小。($n \leq 200000$). 分析 由于每条点出度都为1且满足传递性,可以用并查集做。 如果有一条从x到y的有向边,那么y就是x的父亲。如果x,y在同一集合,说明x,y都在环上。还需维护每个结点到根节点的距离。 参考链接:https: 阅读全文
posted @ 2019-09-06 21:47 Rogn 阅读(500) 评论(0) 推荐(0) 编辑
摘要:题意 最初有 $n$ 个人且互不认识,接下来 $m$ 行,每行有 $x,y$,表示 $x$ 和 $y$ 交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数。 分析 并查集维护集合的并。 考虑两个集合的并对答案的影响,总的来说就是减去集合x中选一个、集合y中选一个,剩下的选两 阅读全文
posted @ 2019-08-15 22:44 Rogn 阅读(162) 评论(0) 推荐(0) 编辑
摘要:题目 链接 题意:在 $10^5 \times 10^5$ 的大网格上,给出 $n$ 的格点的坐标,求联通块数(上下左右及对角线都认为相邻) 分析 DFS需要遍历网格的每个格点,可能会超时? 初始化时,对每个格点建立并查集,遍历每个格点将相邻的合并,最终的集合个数就是联通块的个数。 具体实现时,对 阅读全文
posted @ 2019-07-17 17:10 Rogn 阅读(271) 评论(0) 推荐(0) 编辑
摘要:一、问题描述(题目链接) 有n个门和m个开关,每个开关可以控制任意多的门,每个门严格的只有两个开关控制,问能否通过操作某些开关使得所有门都打开。(给出门的初始状态)。 二、问题分析 大部分开关问题首先要想到的一点就是任何开关操作两次以上都是无意义的,因此对于每个开关,我们要么操作一次,要么不操作。 阅读全文
posted @ 2018-08-16 08:11 Rogn 阅读(214) 评论(0) 推荐(0) 编辑
摘要:一、问题描述(题目链接) 有n种化合物,每种化合物由两种元素组成。当几种的化合物数量等于他们所含不同元素的数量时,就会发生爆炸。现在依次给出化合物的组成,当新的化合物与之前的化合物放在一起会发生爆炸时,就不能允许这个化合物放进来。输出拒绝的次数。 二、问题分析 把元素看成点,化合物看成边,每次新的化 阅读全文
posted @ 2018-08-15 23:01 Rogn 阅读(255) 评论(0) 推荐(0) 编辑
摘要:一、题目描述(题目链接) 给定一个序列,按指定的顺序逐一删掉,求连续子序列和的最大值。例如序列1 3 2 5,按3 4 1 2的顺序删除,即依次删除第3个、第4个、第1个、第2个,答案为5 4 3 0。 二、问题分析 我们知道从并查集中删除元素很难,而合并非常简单。所以我们可以反过来思考,正向删除元 阅读全文
posted @ 2018-08-15 22:21 Rogn 阅读(200) 评论(0) 推荐(0) 编辑
摘要:一、问题描述 题目链接 有n个节点(1≤n≤100000),进行如下两种操作: (1) M a b, 把a、b合并 (2)S a, 把a分离出来 进行M(1≤M≤1000000)次操作,问最后有几个组? 二、解题思路 用并查集来实现,我们都知道并查集的合并操作很容易实现,而从集合中移出一个元素却很难 阅读全文
posted @ 2018-08-15 21:03 Rogn 阅读(778) 评论(0) 推荐(0) 编辑
摘要:一、什么是并查集? 并查集是一种用来管理元素分类的情况的数据结构,并查集可以高效的进行如下操作: 查询元素a和b是否属于同一组 合并元素a和元素b所在的组 但不方便进行分割操作 二、并查集的结构 并查集也是使用树形结构实现的,不过,不是二叉树 每个元素对应一个节点,每个组对应一棵树。在并查集中哪个节 阅读全文
posted @ 2018-08-14 10:24 Rogn 阅读(374) 评论(0) 推荐(1) 编辑