面试之并查集

输入和输出的注意点:scanf读取字符时会读取空格和回车

而scanf读字符串时会自动忽略空格和回车

并查集快速处理两类操作:

  1. 将2个集合合并
  2. 询问两个元素是否在一个集合当中

几乎O(1)完成这两个操作

基本原理

每个集合用一棵树来表示,树根的编号就是整个集合的编号, 每个节点存储它的父节点,用一维数组p[x]来存储这个集合,px表示x的父节点.

问题

  • 如何判断树根 :if(p[x] == x)
  • 如何求x的集合编号:while(p[x] != x) x=p[x];
  • 如何合并两个集合: 输入2个数,不妨认为它们是两棵树(只有一个节点).px是x的根节点,py是y的根节点:
    p[x] = y

优化

路径优化,只要一条路能到达父节点,沿途路径上的点都能够到达父节点.

递归实现:

c 复制代码
int find(int x) 
{
  
  if(x != q[x]) q[x] =find(q[x]);
  return q[x];
    
}
相关推荐
CC数分4 小时前
2026年HRBP岗位硬性要求和加分项
面试·职场和发展·数据分析
2601_962680224 小时前
数据分析面试常考的SQL题和业务题分别是哪几类?
sql·面试·数据分析
黄敬峰5 小时前
一文搞懂 Agentic RAG:用 LangGraph 打造会思考的智能检索架构
面试
晚安日记wanna6 小时前
SSR 为什么不适合登录态从水合冲突到缓存串号
前端·react.js·面试
晚安日记wanna6 小时前
压测 TPS 卡在 800CPU 只跑四成六步定位法
运维·面试·测试
晚安日记wanna6 小时前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
晚安日记wanna6 小时前
TS const 类型参数一道面试题的四层追问
前端·面试·typescript
晚安日记wanna6 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构
晚安日记wanna6 小时前
MySQL 主从延迟别只答并行复制
数据库·面试·架构
SamDeepThinking6 小时前
Java 17内存屏障:为什么需要,怎么用
java·后端·面试