面试之并查集

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

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

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

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

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

基本原理

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

问题

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

优化

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

递归实现:

c 复制代码
int find(int x) 
{
  
  if(x != q[x]) q[x] =find(q[x]);
  return q[x];
    
}
相关推荐
Bella的成长园地9 小时前
面试中关于 c++ async 的高频面试问题有哪些?
c++·面试
Abona10 小时前
C语言嵌入式全栈Demo
linux·c语言·面试
她说..14 小时前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
七禾页丫16 小时前
面试记录14 上位机软件工程师
面试·职场和发展
前端菜鸟日常16 小时前
2026 鸿蒙原生开发 (ArkTS) 面试通关指南:精选 50 题
华为·面试·harmonyos
jiayong2318 小时前
Vue2 与 Vue3 核心原理对比 - 面试宝典
vue.js·面试·职场和发展
多多*19 小时前
Mysql数据库相关 事务 MVCC与锁的爱恨情仇 锁的层次架构 InnoDB锁分析
java·数据库·windows·sql·oracle·面试·哈希算法
cyforkk19 小时前
15、Java 基础硬核复习:File类与IO流的核心逻辑与面试考点
java·开发语言·面试
jiayong2319 小时前
Vue2 与 Vue3 常见面试题精选 - 综合宝典
前端·vue.js·面试
敲敲了个代码20 小时前
从N倍人力到1次修改:Vite Plugin Modular 如何拯救多产品前端维护困境
前端·javascript·面试·职场和发展·typescript·vite