功能:
1.合并两个集合;
2.查找两个元素是否在同一集合。
实现思想:每个集合都用树来表示,然后有父节点作为标志。
时间复杂度:利用路径压缩实现 近乎o(1);
int p[N];//父节点
int find(int x)
{
if(p[x]!=x) p[x]=find(p[x]);//p[x]==x时为根 这是一个递归的过程 直到找到根时才停止
return p[x];
}
int main()
{
合并://将集合a,b所在集合合并
p[find(a)]=find(b);//将a的根 连在b的下面;
判断://集合a,b是否在同一集合
if(find(a)==find(b)) printf("Yes");//查询根 是否一样即可
else printf("No");
}
可以额外用一个数组来增加附属属性:1.记录终结位置 2.附加与根节点的距离