当前位置: 首页 > article >正文

笔记:代码随想录算法训练营day60:并查集理论基础、寻找存在的路径

本文为学习并查集理论基础 | 代码随想录、代码随想录过程中的思考

find是找的顶头上司,而不是当前上司,最后怎么也得找到一个顶头上司的上司是自己,要不然这个结构也不成立

使用issame替换会使被操作者为当前节点,而非根节点。join(u,v)的功能为将v的根节点挂到u的根节点下

模拟过程可以看出,join中的find中的路径压缩要在长度大于2(路径大于1)的时候才会体现出来

107. 寻找存在的路径

卡码网题目链接(ACM模式)

使用并查集的模板,主要把该连的线(边)连一下,然后如果二位是同一领导就可以判断在同一合集了,能连上线,就是所谓的有路径

#include <iostream>
#include <vector>
using namespace std;
 
int n;
vector<int> father=vector<int>(101,0);
 
void init(){
    for(int i=0;i<n;i++){
        father[i]=i;
    }
     
}
 
int find(int u){
    return u==father[u]?u:father[u]=find(father[u]);
}
 
bool isSame(int u,int v){
    u=find(u);
    v=find(v);
    return u==v;
}
void join(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v) return;
    else{
        father[v]=u;    //不要误写为u=father[v];
    }
}
int main(){
    int m,s,t,source,destination;
    cin>>n>>m;
    init();
    for(int i=0;i<m;i++){
        cin>>s>>t;
        join(s,t);
    }
    cin>>source>>destination;
 
    if (isSame(source,destination)==true) cout<<1<<endl;
    else{
        cout<<0<<endl;
    }
    return 0;
}


http://www.kler.cn/a/599625.html

相关文章:

  • vue2中引入elementui
  • Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
  • 在 Kubernetes 中部署 Trivy 漏洞扫描服务
  • 地理信息系统(GIS)在智慧城市中的40个应用场景案例
  • BSides Vancouver 2018靶机通关教学
  • ROS2下MoveIt+Rviz+MuJoCo 三剑合璧!Panda 机械臂联动仿真!
  • Box-Cox变换:让数据服从正态分布的数学魔法
  • [unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用
  • 简单描述一下,大型语言模型简史
  • An Easy Problem(信息学奥赛一本通-1223)
  • 计算机是如何工作的
  • 【Ratis】SlideWindow滑动窗口机制
  • 在C++ Qt中集成Halcon窗口并实现跨平台兼容和大图加载
  • IIS漏洞再现
  • conda install 和 pip install 的区别
  • 【HTML5游戏开发教程】零基础入门合成大西瓜游戏实战 | JS物理引擎+Canvas动画+完整源码详解
  • 详解Redis 核心特性与基础
  • C++相关
  • 2025高频面试算法总结篇【字符串】
  • 蓝桥杯算法题分享(二)