并查集
文章平均质量分 64
C+G
也就那样
展开
-
并查集/dfs解决——leetcode每日一题——1020飞地的数量
文章目录题目描述题目解析解题代码题目描述题目链接题目解析一、以边界值为对象进行搜索解决一开始很快就想到用比较暴力的直接dfs深搜,然后就超时了。注意此题由于以 1 是否能延申到整个边界以外来判断是否为有效的 1 所以我们需要取巧,应该以所有边界的 1 为对象先把所有能超出的 1 搜出来,然后剩余的 1 就是答案了。二、并查集合并+是否接壤边界属性更新创建一个并查集,用一维数组存下所有二维数组的元素,同时再增加一个一维数组用于判断是否边界接壤,每次 merge 操作的时候判断需要同时执行合并原创 2022-02-12 20:08:29 · 536 阅读 · 0 评论 -
牛客-食物链——并查集的运用(扩容用下标表示不同类型的集合)
文章目录题目题目详解解题代码题目题目链接题目详解解释三个集合代表:f[x]所处集合一定包含所有与x同类元素f[x+N]所处集合一定包含所有捕食x的元素f[x+2*N]所处集合一定包含所有被x捕食的元素实际上这个方法在之前有碰到过类似的,只不过这次需要每个元素都能表达出它的吃与被吃的对应关系集合,所以需要增加2*N个容量!之前有道集合问题也用的并查集,只需要增两个容量表示两个集合即可,但这次是不一样了。之前那题的题解链接那么我们来看一下哪些情况是同类(1)a吃c,b也吃c,则a原创 2022-01-19 22:35:45 · 547 阅读 · 0 评论 -
牛客练习-凤凰——不同寻常的最短路(找规律求结点数)
文章目录题目六:凤凰题目分析解题代码法一:建树dfs法二:并查集题目六:凤凰题目链接题目分析这题我开始以为就是一个从1点开始的最短路算法,然后用了各种最短路算法也没过,后面发现原来是有这个"堵车"的限制!注意由于题目是n个点,配备n-1条边,一般是不会存在环的!以下为堵车情况的手写分析与证明结论的过程:得出结论:当有"堵车"限制之后,在树上到达某点经历的时间,就是该点分支的最大结点数。所以实际上求到达1结点的时间,就是它所有子树的最大结点个数!对于直接的计算树中结点个数我们有多种原创 2022-01-10 23:06:58 · 307 阅读 · 0 评论 -
牛客-道路建设——最小生成树模板题
文章目录题目题目详解解题代码题目题目链接题目详解就一非常简单的最小生成树问题而已,但是就是耗了我很长时间也不知错哪了(现在也不清楚)。。我用的Kruskal算法实现最小生成树,而我是用的最小堆实现的,然后最小堆实现就硬是给我卡最后一个用例,我也不知道为什么?然后改普通数组排序就直接过了。。。以下为最小堆实现的main函数,然后就硬是卡最后一个用例,把最小堆换数组存值后就过了。。int main() { int c,n,m; int u,v,w; UnionFi原创 2022-01-13 14:02:04 · 166 阅读 · 0 评论 -
leetcode打卡——1584. 连接所有点的最小费用
文章目录题目题目解析解题代码朴素Prim算法优先队列Prim算法Kruskal算法题目OJ平台题目解析很明显的最小生成树问题,直接用Prim算法或者Kruskal算法即可!解题代码朴素Prim算法class Solution {public:// 基本版本的Prim算法vector<int>path;vector<int>cost;int res; int get_cost(vector<int>&p1,vector<i原创 2021-11-02 14:56:05 · 103 阅读 · 0 评论 -
蓝桥杯历届试题-城市建设
文章目录题目解题基础知识:并查集+最小生成树此题最大的两个坑点一、需要分类讨论为两种情况:建设码头 和 不建设码头二、只要权值为负数便可以继续形成环解题代码(仅供参考,重要是掌握最小生成树)题目oj平台解题基础知识:并查集+最小生成树读完题目,它的题意首先我们要清楚,就是需要以最少的预算用水路或者陆路的方式将所有城市连在一起,我们把建设道路的成本看作是两个结点之间的权值,则把所有点连在一起的最小成本情况可以看作是一颗最小生成树,关于什么是最小生成树,做着这题之前我们一定要先了解一下,我将我以前写原创 2021-08-20 20:25:29 · 365 阅读 · 0 评论 -
牛客-NOIP信息传递——并查集解决最小环问题
文章目录题目题目详解解题代码题目题目连接题目详解上面的手写已经很详细了,我这里做个总结:这是一个最小环问题。此法限制条件:每个点的出度必须为1(方便计算环里面的结点个数)具体做法:用并查集思路做每条边的连接。//TODO 并查集的查找动作,查找的同时记一波数int find(int i,int& cnt){ cnt++; if(i==f[i])return i; return find(f[i],cnt);//TODO 注意为了方便每次能查找根原创 2022-01-13 17:43:44 · 460 阅读 · 0 评论 -
并查集--mark,真是个好思想
文章目录题目:并查集的思想代码题目:并查集的思想根据等号的传递性,把所有相等关系的字符进行联通成为一个帮派,而每个帮派就代表了不同的集合的相等关系,每个帮派具有一个帮主(根节点)。建立好各个帮派后,不等号的判断就只需要判断,这两个字符是否真的在不同的帮派下,如果在同一个帮派下,则这句话是矛盾的,故return false。并查集的好处:可以快速建立具有某种联系的帮派,这便于我们查询两个事物是否位于同一个帮派(如果是同一个帮派则帮主相同)。可以快速合并不同的帮派,如果根据某种已知条原创 2021-05-24 01:12:41 · 91 阅读 · 0 评论 -
关于并查集的一切全在这里了
文章目录并查集初识「并查集」常用术语「并查集」基本思想「并查集」的两个实现方式Quick Find 方式实现并查集Quick Find工作原理:代码实现与验证时间复杂度Quick Union 方式实现并查集Quick Union的工作原理为什么 Quick Union 比 Quick Find 更加高效?代码实现与验证时间复杂度按秩合并优化并查集视频讲解代码实现与验证路径压缩优化的并查集视频讲解代码实现(路径压缩+按秩合并)综合运用例题并查集初识如果给你一些顶点,并且告诉你每个顶点的连接关系,你如何才能原创 2021-07-30 19:50:32 · 278 阅读 · 0 评论 -
牛客-集合问题——并查集的运用
文章目录题目题目解析解题代码题目题目链接题目解析简述:将下标(用哈希表根据值来维护下标信息)用并查集连成集合,设置两个单独结点a,b来进行额外的维护。一旦无法连入A则把该集合整个根结点设为b,一旦无法连入B则把该集合整个根节点设为a。解题代码#include <bits/stdc++.h>using namespace std;#define MAXN 100010int n, A, B, a, b, maxn = 0, val[MAXN], fa[MAXN];unor原创 2022-01-18 19:53:37 · 645 阅读 · 0 评论