一.基本操作:
1.查询元素属于的集合; 2.两个集合 合并为一。
集合的表示方法: [ 代表元 ] 法。选择固定元素表示集合。
集合的归属关系的表示方法:1.维护数组f [ x ],存每个元素对应集合的代表。
2.fa [ x ] 储存x的父亲节点。合并时,只需要连接两个树根。
二.路径压缩:
在FIND-SET操作中,把查找路径上的每个结点都直接指向根结点。
路径压缩并不改变结点的秩。关于路径压缩,之间为FIND-SET操作前集合,
之后为FIND-SET操作后集合。此时,查找路径上的每一个结点都直接指向根。
路径压缩代码实现方式有两种:递归式和非递归式。
void find_father(int x){
return fa[x]==0?x:fa[x]=find_father(fa[x]);
}
非递归式:
int find(int x){
int k, j, r;
r &