day 53 图论part5

文章目录

  • [卡码网 107. 寻找存在的路线](#卡码网 107. 寻找存在的路线)

卡码网 107. 寻找存在的路线

并查集基础题目,并查集的四种方法,初始化,每一个节点初始化指向自己,join方法,把两个节点加入到同一个集合中,isame方法,判断两个节点是否在同一个集合中,find方法,找到每一个节点的根节点,使用路径压缩。

java 复制代码
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        DisJoint disjoint = new DisJoint(N + 1);
        for (int i = 0; i < M;i++) {
            int s = sc.nextInt();
            int t = sc.nextInt();
            disjoint.join(s, t);
        }
        if (disjoint.isSame(sc.nextInt(), sc.nextInt())) {
            System.out.println("1");
        }
        else {
            System.out.println("0"); 
        }

    }
}

class DisJoint {
        private int[] father;
        public DisJoint(int N) {
            father = new int[N];
            for (int i = 0; i < N; i++) {
                father[i] = i;
            }
        }
        public int find (int n) {
            return n == father[n] ? n : (father[n] = find(father[n]));
        }
        public boolean isSame(int n, int m) {
            n = find(n);
            m = find(m);
            return n == m;
        }
        public void join(int n, int m) {
            n = find(n);
            m = find(m);
            if (n == m) {
                return;
            }
            father[n] = m;
        }
    }
相关推荐
荣码4 分钟前
从0到1搭一个生产级RAG系统:串联前面21篇所有知识
java·python
xuxigifxfh7 分钟前
牛客:HJ170 01序列
java·开发语言·算法·华为机考
朝朝辞暮i17 分钟前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法
野生技术架构师28 分钟前
牛客网互联网大厂 Java 高频面试题整理(持续更新)
java·开发语言
殷色玫瑰29 分钟前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio
小师兄吃牛肉1 小时前
Java语法 | 多重循环
java·开发语言·python
Han.miracle1 小时前
MySQL InnoDB:MVCC、记录锁、间隙锁、二级索引MVCC底层原理
java·开发语言
jidaowansui1 小时前
B3643 图的存储———>数组模拟邻接矩阵
算法
不停喝水1 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
y1su2 小时前
Leetcode 二分模板
java·数据结构·算法·leetcode·排序算法