面试之并查集
- 手机
- 2025-08-17 11:39:02

输入和输出的注意点:scanf读取字符时会读取空格和回车 而scanf读字符串时会自动忽略空格和回车
并查集快速处理两类操作: 将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 优化路径优化,只要一条路能到达父节点,沿途路径上的点都能够到达父节点. 递归实现:
int find(int x) { if(x != q[x]) q[x] =find(q[x]); return q[x]; }上一篇
17.电话号码的字母组合
下一篇
云计算:常用系统前端与后端框架