代码随想录算法训练营第55天| 并查集 107.寻找存在的路径

并查集理论基础:

简单来说就是看一些点是否在同一个集合里。主要用来解决连通性问题。他有两个功能,一个是判断两个元素是否属于同一集合,另一个是将两个元素加入集合。重点在寻根过程,默认一个元素她的根是她自己,如果是的话,就返回她本身,如果不是的话就去找她的根的根。此外还有判断功能和合并功能。

第一次做还是有点不熟练,一遍看定义一边写,本身并不难。

107.寻找存在的路径

题目链接:107.寻找存在的路径

代码:

cpp 复制代码
//因为是否在一组 只需要判断father相不相同就可以 所以有向图无向图都可以用
#include<iostream>
using namespace std;
#include<vector>

vector<int> father;

//找到这个点的根 寻根过程
int find(int s){
    if(father[s]==s) return s;//如果根就是自己 直接返回
    else return find(father[s]);//如果不是 就层层寻找他的根的根
}

//将s,t这条边加入并查集
void join(int s, int t){
    s=find(s);
    t=find(t);//找到这个点的根
    if(s==t) return;
    father[t]=s;
}


bool issame(int s, int t){
    s=find(s);
    t=find(t);
    return s==t;
}

int main(){
    int m,n,s,t;
    cin>>n>>m;
    
    //存储点n的根是哪个点
    
    for(int i=0;i<=n;i++){
       father.push_back(i);
    }
    
    for(int i=0;i<m;i++){
        cin>>s>>t;
        join(s,t);
    }
    
    cin>>m>>n;
    if(issame(m,n))cout<<1;
    else cout<<0;
    return 0;
}
相关推荐
汉克老师3 小时前
GESP2024年6月认证C++二级( 第一部分选择题(9-15))
c++·循环结构·分支结构·gesp二级·gesp2级·求余数
追随者永远是胜利者3 小时前
(LeetCode-Hot100)53. 最大子数组和
java·算法·leetcode·职场和发展·go
生成论实验室4 小时前
即事经:一种基于生成论的宇宙、生命与文明新范式
人工智能·科技·神经网络·算法·信息与通信
王老师青少年编程4 小时前
csp信奥赛c++高频考点假期集训(分模块进阶)
数据结构·c++·算法·csp·高频考点·信奥赛·集训
王老师青少年编程5 小时前
2020年信奥赛C++提高组csp-s初赛真题及答案解析(选择题1-5)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
癫狂的兔子5 小时前
【Python】【机器学习】K-MEANS算法
算法·机器学习·kmeans
Bear on Toilet6 小时前
递归_二叉树_50 . 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·深度优先·递归
plus4s6 小时前
2月18日(82-84题)
c++·算法·动态规划
wangluoqi7 小时前
c++ 树上问题 小总结
开发语言·c++
艾醒7 小时前
打破信息差——2026年2月19日AI热点新闻速览
算法