首页 > 编程语言 >*算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径

*算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径

时间:2024-08-09 21:26:50浏览次数:13  
标签:vector return int 查集 father find 第四十七 107

刷题记录

*并查集理论基础

讲解

107. 寻找存在的路径

题目地址

直接套模板
结点编号从1开始,因此定义father数组时需要n+1个空间,否则会越界。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
#include<bits/stdc++.h>
using namespace std;

// 初始化
void init(vector<int> &father){
    for(int i=0; i<father.size(); i++) father[i] = i;
}
// 查找所在并查集的根节点
int find(vector<int> &father, int u){
    if(u == father[u]) return u;
    return father[u] = find(father, father[u]);
    // return father[u];
}
// 判断两节点是否在同一并查集
bool isSame(vector<int> &father, int u, int v){
    u = find(father, u);
    v = find(father, v);
    return u == v;
}

// 把v加入u
void join(vector<int> &father, int u, int v){
    u = find(father, u);
    v = find(father, v);
    if(u == v) return;
    father[v] = u;
}

int main(){
    int n, m, s, t, src, des;
    cin>>n>>m;
    vector<int> father(n+1, 0);
    init(father);
    for(int i=0; i<m; i++){
        cin>>s>>t;
        join(father, s, t);
    }
    cin>>src>>des;
    cout<<isSame(father, src, des);
    
    return 0;
}

标签:vector,return,int,查集,father,find,第四十七,107
From: https://blog.csdn.net/weixin_43872997/article/details/141070546

相关文章

  • 广场舞老太太都看得懂的并查集
    1.并查集为什么叫“并查集”这个名字?因为并查集它的主要用处就是并(合并无交集集合)和查(查找元素或判断是否有该元素),当然路径压缩也得用到它。话说回来,并查集虽然是图论里的东西,但是本身像个树。2.算法说到并查集,就不得不提到压缩路径了,它是一个超级简单,但是很牛的算法,算法主......
  • 为什么并查集路径压缩不需要维护rank?
    在基于rank进行优化的并查集中,路径压缩确实不需要维护rank数组。这是因为路径压缩和rank优化有不同的目的和作用机制。让我们详细解释一下原因:Rank优化的目的:Rank优化的主要目的是在合并两个集合时,让较小的树成为较大的树的子树,以保持树的平衡性。这样可以避免树变得过于深,从而......
  • 并查集详解
    并查集并查集是一种树形数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。具体详解见此并查集本身是真的太板了。。普及-以下的题基本全是板。直接见例题吧:板子一【模板】并查集题目描述如题,现在有一个并查集,你需要完成合并和查询操作。【】输入格式】第......
  • 数据结构 - 并查集路径压缩
    ......
  • 并查集
    并查集在每个集合中选择一个元素,作为整个集合的代表。使用一个树形结构存储每个集合,树上的每个节点都是一个元素,树根是集合的代表元素。存储时,记录每个节点\(x\)的父亲\(fa[x]\)。查询\(x\)和\(y\)是否在同一集合时,分别从两个点出发,寻找它们的树根。若树根相同,则说明\(......
  • 数据结构 - 并查集基础
    ......
  • 【每日一题】【并查集】【力扣】695.岛屿的最大面积 C++
    力扣695.岛屿的最大面积695.岛屿的最大面积题目描述给你一个大小为m×nm\timesnm×n的二进制矩阵......
  • 树(tree) - 题解(带权并查集)
    树(tree)时间限制:C/C++2000MS,其他语言4000MS内存限制:C/C++256MB,其他语言512MB描述给定一个\(n\)个结点,\(n−1\)条边的有根树。第\(i\)条边可以用(\(a_i,b_i\))来描述,它表示连接结点\(a_i\)和结点\(b_i\)的一条边,其中结点\(a_i\)是结点\(b_i\)的父节点。......
  • 代码随想录算法训练营第57天 | 并查集理论基础
    并查集理论基础https://www.programmercarl.com/kamacoder/图论并查集理论基础.html107.寻找存在的路径https://kamacoder.com/problempage.php?pid=1179代码随想录https://www.programmercarl.com/kamacoder/0107.寻找存在的路径.html#思路并查集理论基础并查集用于判断......
  • 【学习笔记】并查集应用
    【学习笔记】并查集应用以NOI2001食物链为例の两种并查集用法。题目大意:规定每只动物有且仅有三种可能的种类\(A、B、C\),\(A\)会吃\(B\),\(B\)会吃\(C\),\(C\)会吃\(A\)。给定\(N\)只动物,\(K\)个语句。每个语句有如下两种可能的表达:1XY表示动物\(X\)与动......