首页 > 编程语言 >并查集的实现【学习算法】

并查集的实现【学习算法】

时间:2023-10-11 13:03:02浏览次数:40  
标签:int 查集 学习 fx 算法 static new public size



并查集的实现【学习算法】

  • 前言
  • 版权
  • 推荐
  • 并查集的实现
  • 最后


前言

2023-9-26 14:38:02

以下内容源自《【学习算法】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是
禁止其他平台发布时删除以上此话

推荐

算法讲解056【必备】并查集-上

并查集的实现

并查集的实现

package test1;// 并查集模版(牛客)
// 路径压缩 + 小挂大
// 测试链接 : https://www.nowcoder.com/practice/e7ed657974934a30b2010046536a5372
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下的code,提交时请把类名改成"Main",可以直接通过

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
class Code01_UnionFindNowCoder {

    public static int MAXN = 1000001;

    public static int[] father = new int[MAXN];

    public static int[] size = new int[MAXN];

    public static int[] stack = new int[MAXN];

    public static int n;

    public static void build() {
        for (int i = 0; i <= n; i++) {
            father[i] = i;
            size[i] = 1;
        }
    }

    // i号节点,往上一直找,找到代表节点返回!
    public static int find(int i) {
        // 沿途收集了几个点
        int size = 0;
        while (i != father[i]) {
            stack[size++] = i;
            i = father[i];
        }
        // 沿途节点收集好了,i已经跳到代表节点了
        while (size > 0) {
            father[stack[--size]] = i;
        }
        return i;
    }

    public static boolean isSameSet(int x, int y) {
        return find(x) == find(y);
    }

    public static void union(int x, int y) {
        int fx = find(x);
        int fy = find(y);
        if (fx != fy) {
            // fx是集合的代表:拿大小
            // fy是集合的代表:拿大小
            if (size[fx] >= size[fy]) {
                size[fx] += size[fy];
                father[fy] = fx;
            } else {
                size[fy] += size[fx];
                father[fx] = fy;
            }
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer in = new StreamTokenizer(br);
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        while (in.nextToken() != StreamTokenizer.TT_EOF) {
            n = (int) in.nval;
            build();
            in.nextToken();
            int m = (int) in.nval;
            for (int i = 0; i < m; i++) {
                in.nextToken();
                int op = (int) in.nval;
                in.nextToken();
                int x = (int) in.nval;
                in.nextToken();
                int y = (int) in.nval;
                if (op == 1) {
                    out.println(isSameSet(x, y) ? "Yes" : "No");
                } else {
                    union(x, y);
                }
            }
        }
        out.flush();
        out.close();
        br.close();
    }

}

最后

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦


标签:int,查集,学习,fx,算法,static,new,public,size
From: https://blog.51cto.com/u_15719556/7809296

相关文章

  • RationalDMIS2023编程学习2023
    1.编程流程简介编程(1)研读图纸----配置测针方案,确定装夹方案,规划坐标系----------打开自学习-----设定模式,设定逼近回退,设定测头角度,设定坐标系,设定移动轨迹,设定输出报告。(2)打开机器2.自学习模式的开启3.模式选择在编写程序之前先要设定好,点击黑色摇杆图样图标选择模式,模式/手动模......
  • 谈谈"求线段交点"的几种算法(js实现,完整版)
    谈谈"求线段交点"的几种算法(js实现,完整版)"求线段交点"是一种非常基础的几何计算,在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说,希望对大家有所帮助. 本文讲的内容都很初级,主要是面向和我一样的初学者,所以请各位算法帝......
  • 机器学习教程
    目录有监督学习含义回归单元线性回归含义代价函数梯度下降法将梯度下降法与代数函数结合在一起多元线性回归含义多元假设函数多元代价函数多元梯度下降法将多元梯度下降法与代数函数结合在一起特征缩放啥是特征缩放?公式均值归一化学习率的调整的建议介绍建议正规方程解释公式如何......
  • SQL 语句 增删改查、边学习边增加中..... 这一部分为select
    SQL语句按照最大的类别分为1、增加insert 2、删除delete  https://www.cnblogs.com/kuangmeng/p/17756654.html3、修改update4、查询select: https://www.cnblogs.com/kuangmeng/p/17756425.html这一部分为select查询操作,以及对应的Leecode题,进行加......
  • Java算法之动态规划详解
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事......
  • 深入学习JVM04 线程与变量
    18JVM中的变量在food背后,有一个与它对应的klass对象,它记录了food的类型信息,就像是有一个标签写着food的品类和特点。每个klass对象维护着一个虚函数表,记录了类中所有的虚函数以及对应的指针。当food调用一个方法时,JVM根据它的实际类型找到它的klass对象,然后在虚函......
  • ORB-SLAM3学习笔记
    在IMU初始化之前和之后,ORB-SLAM3的坐标系的定义是不同的:初始化之前:坐标系基于第一帧图像。它的定义完全基于视觉信息。Z轴正向视深度,X轴和Y轴与图像平面对齐。初始化之后:一旦IMU初始化成功,坐标系会调整以适应一个“世界坐标系”,其中重力方向定义为Z轴负方向。这样,X轴......
  • 《信息安全系统设计与实现》第六周学习笔记
    第十一章EXT2文件系统EX2文件系统数据结构创建虚拟硬盘mke2fs[-bblksize-Nninodes]devicenblocks虚拟磁盘布局Block#0:引导块超级块Block#1容纳整个文件系统的信息超级块的重要字段:u32s_inodes_count://文件系统中节点总数u32s_blocks_count://文件......
  • 《算法学习专栏》——DP问题之线性DP
    2023年10月10日更新于2023年10月10日一、前言本栏,为线性DP,题目主要来源日常,目前主要来源于Acwing的提高课。希望以后做到线性DP的题目,也能加进来,不断完善。二、线性DP2.1目前的模型:数字三角形模型最长上升子序列模型2.2目前解决的问题:可以解决路径上的各种值。解决......
  • 基于Qlearning强化学习的路径规划算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A  3.算法理论概述       路径规划在机器人、自动驾驶等领域中具有重要应用。Q-learning是一种经典的强化学习算法,可以用于解决路径规划问题。本文介绍了基于Q-learning的路径规划算法,该算法可以在未知......