代码随想录:107、寻找存在的路径

news/2024/10/4 22:21:04 标签: 算法, 数据结构

107. 寻找存在的路径

这是道简单的并查集题目,设计插入,查找函数,比较基础

1、条件准备

father数组存每个结点的祖宗结点是谁
  #include <bits/stdc++.h>
  #define rep(i, l, r) for (int i = l; i <= r; i++)
  using namespace std;
  #define endl '\n'

int father[105];
int n,m;

2、主函数

首先初始化,每个结点的祖宗结点是本身。
然后插入边,更新father数组,通过join函数来实现
然后输入待查找的两结点,判断一下它们的祖宗结点是否一样
 int main()
  {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
  
   cin>>n>>m;
   rep(i,1,n)
   father[i]=i;
   rep(i,1,m)
    {
      int a,b;cin>>a>>b;
      join(a,b);
    }

   int be,en;cin>>be>>en;
   if(find(be)==find(en))cout<<"1";
   else cout<<"0";
  
    return 0;
  }

3、find函数

如果祖宗结点是本身,则已经找到祖宗结点,返回。
否则找该结点的父节点的祖宗结点,并进行路径压缩。
int find(int u)
{
  return u==father[u]?u:father[u]=find(father[u]);
}

4、join函数

找出这两个结点的祖宗结点。如果一样则什么都不做。
否则更新其中一个的祖宗结点为另一个。
void join(int u,int v)
{
  u=find(u);
  v=find(v);
  if(u==v)return ;
  father[u]=v;
}

5、总结

并查集入门题
完整代码如下
  #include <bits/stdc++.h>
  #define rep(i, l, r) for (int i = l; i <= r; i++)
  using namespace std;
  #define endl '\n'

int father[105];
int n,m;

int find(int u)
{
  return u==father[u]?u:father[u]=find(father[u]);
}

void join(int u,int v)
{
  u=find(u);
  v=find(v);
  if(u==v)return ;
  father[u]=v;
}
  int main()
  {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
  
   cin>>n>>m;
   rep(i,1,n)
   father[i]=i;
   rep(i,1,m)
    {
      int a,b;cin>>a>>b;
      join(a,b);
    }

   int be,en;cin>>be>>en;
   if(find(be)==find(en))cout<<"1";
   else cout<<"0";
  
    return 0;
  }


http://www.niftyadmin.cn/n/5690384.html

相关文章

YOLOv11改进 | 独家创新- 注意力篇 | YOLOv11结合全新多尺度动态增强注意力机制DSAttention(全网独家创新)

1. DSAttention介绍 DSAttention注意力机制在图像特征提取中具有以下优点: (1). 全局信息捕捉能力:DSAttention机制通过使用软注意力机制(Softmax Attention)来计算特征图的全局相关性。这种方式能够更好地捕捉图像中的全局信息,有助于增强对复杂场景或大尺度物体的识别能…

Maya动画--基础约束

005-基础约束02_哔哩哔哩_bilibili 父子约束 移动圆环&#xff0c;球体会跟着移动&#xff0c;并回到初始的相对位置 不同物体间没有层级关系 明确子物体与父物体间的关系 衣服上的纽扣 法线约束 切线约束 碰到中心时会改变方向

深度学习----------------------------编码器、解码器架构

目录 重新考察CNN重新考察RNN编码器-解码器架构总结编码器解码器架构编码器解码器合并编码器和解码器 重新考察CNN 编码器&#xff1a;将输入编码成中间表达形式&#xff08;特征&#xff09; 解码器&#xff1a;将中间表示解码成输出。 重新考察RNN 编码器&#xff1a;将文…

mac Wireshark You do not have permission to capture on device “rvio“.

原因&#xff1a; 权限不足 解决方案&#xff1a; 打开终端在终端输入 whoamin (会在终端显示本机的实际用户名字) 例如&#xff1a;xiaoming进入 /dev 目录 cd /dev输入命令&#xff1a;ls -la | grep bp输入命令&#xff1a;sudo chown whoamin xiaoming:admin bp*重新打开 …

【电脑·安卓游戏】《黑神话:悟空》像素版

《黑神话像素版》是一款别出心裁的游戏力作&#xff0c;由bilbil创作者打造。该游戏以像素化的艺术风格&#xff0c;精妙地简化并再现了《黑神话&#xff1a;悟空》中的一系列核心玩法与经典场景。通过匠心独运的设计&#xff0c;它不仅成功复刻了原作中引人入胜的战斗系统、细…

动态规划的技巧

以下是我的个人刷题经验&#xff0c;请大家谨慎采纳&#xff0c;如有疑问或认为不对的&#xff0c;欢迎评论和讨论。 1. 在dp里使用辅助位置 有时候边界条件要特殊考虑&#xff0c;比较麻烦&#xff0c;为了简化对边界条件的处理&#xff0c;可以适当增加辅助位置。 1. 1. 相…

10其他内容补充

如何生成随机数原理详细分析 文章目录 如何生成随机数原理详细分析原理如果使用相同的随机数种子,得到的随机数序列会是相同的吗示例为什么需要随机数种子 动态内存管理前言malloc函数calloc函数realloc函数free函数 - 避免内存泄漏常见的动态内存错误 原理 说到如何生成一个随…

TCN模型实现电力数据预测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色&a…