首页 > 其他分享 >数据结构:速通并查集

数据结构:速通并查集

时间:2024-09-27 20:46:39浏览次数:1  
标签:速通 int 查集 find fa 集合 数据结构 节点

并查集用来干什么:处理不相交的集合的合并以及查询相交集合的个数等情况

例题(自行搜索):360 24年第一批笔试算法题传染病防控

 

并查集具有三个操作init find union

init

初始化集合,将当前所有节点的父节点设置为自己

int fa[]=new int[10000];
int size[]=new int[10000];//这里是为了记录当前节点有多少子节点,假设自己也算子节点
void init(int n){
    for(int i=0;i<n;i++){
        fa[n]=i;size[i]=1;
} }

find

找到该节点的父节点

int find(int n){
    if(fa[n]==n){//说明当前节点的父节点就是自己
          return n;
    }    
    else{
          fa[n]=find(fa[n]);//递归找到当前节点的最大父节点
          return fa[n];
    }
}

union

将节点合在一起,让他们形成一个集合,由fa[n]表示当前节点的父节点是谁

void union(int x,int y){
    int fa_x=find(x);
    int fa_y=find(y);
    if(fa_x==fa_y)//说明他们本来就是一个父节点,不需要处理
        return;
    fa[x]=y;//他们是两个集合,那么这里就需要将他们并在一起。这里取y作为父节点  
size[y]+=size[x];//x已经成为了y的子节点,那么x的所有子节点也应该加入到y中
}

 

标签:速通,int,查集,find,fa,集合,数据结构,节点
From: https://www.cnblogs.com/kun1790051360/p/18436515

相关文章

  • 算法速通-90题(1—完数难题)[含pyhton,java,c++]
    题目:完数难题 题目描述如下:    小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数   比如6,28都是完数:6=1+2+3 ; 28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮......
  • 数据结构day1
    目录1.1数据1.2逻辑结构1.3存储结构1)顺序存储结构2)链式存储结构1.4操作(数据的运算)2.1算法与程序2.2算法与数据结构2.3算法的特性2.4如何评价一个算法的好坏?2.5时间复杂度2.6空间复杂度数据结构数据的逻辑结构、存储结构、数据的操作(数据的运算)1.1数据数......
  • 数据结构顺序表
    顺序表、单向链表、单向循环链表、双向链表、双向循环链表、顺序栈、链式栈、循环队列(顺序队列)、链式队列1)逻辑结构:线性结构2)存储结构:顺序、链式3)特点:一对一,每一个节点最多有一个前驱和一个后继,首节点无前驱,尾节点无后继顺序表特点:内存连续(数组)1)逻辑结构:线性结构2......
  • Java中的栈数据结构及其应用
    Java中的栈数据结构及其应用栈是一种线性数据结构,遵循后进先出(LIFO)的原则,即最后插入的元素最先被移除。栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(peek)。本文将介绍栈的基本结构、操作及在JDK中的应用。栈的基本结构一个简单的栈可以用数组或链表实现,下面是基于链......
  • 数据结构编程实践20讲(Python版)—02链表
    本文目录02链表linked-listS1说明S2示例单向链表双向链表循环链表S3问题:反转单向链表求解思路Python3程序S4问题:双向链表实现历史浏览网页求解思路Python3程序S5问题:基于循环链表的玩家出牌顺序求解思路Python3程序往期链接01数组02链表linked-lis......
  • 算法与数据结构——归并排序
    归并排序归并排序(mergesort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。*合并阶段**:当子数组长度为1时终止划分,开始合并,持续地讲左右两个较短的有序数组合并为......
  • 数据结构——链表
    c++数据结构p3链表链表的每一个节点都是独立分配出来的从当前节点能够找到下一个节点Node(链表)=date(数据域)+next(地址域)地址域:存储的是下一个节点的地址最后一个地址域是nullptrstructNode{intdata;Node*next;}特点:每一个节点都是在堆内存上独立new出来......
  • log型数据结构优化DP解题报告(uoj)
    交作业用T220417最长公共上升子序列不难看出状态同最长公共子序列,但由于上升条件限制,加一个限制:\(f_{i,j}\)表示\(a_{1...i}\)匹配\(b_{1...j}\)且\(a_i\)必须做结尾的最长公共上升子序列长度转移方程为\(f_{i,j}=f_{i,j-1}\)(if\(a_i\neqb_j\))\(f_{i,j}=\max_{k......
  • 数据结构之——队列
    一、队列概述        队列是一种操作受限的线性表,其限制条件为允许在表的一端进行插入,而在表的另一端进行删除。插入的一端叫做队尾,删除的一端叫做队头。向队列中插入新元素的行为称为进队,从队列中删除元素的行为称为出队。例如军训的时候,都排成一列,有头有尾。假设你......
  • 【JAVA-数据结构】包装类&简单认识泛型(1)
        这篇包含包装类和泛型相关知识,会用两篇文章进行讲解。1包装类        在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。1.1基本数据类型和对应的包装类除了Integer和Character......