今天比较混,只学习了并查集的一些基本知识,明天必须不能在混了,加油!
并查集:
顾名思义就是将集合中的元素以树的双亲表示法表示出来,进行查与并的操作。查就是输入一个元素,找出它的根节点。并的操作就是将两个集合并在一起,相当于将森林转换为树。
查:首先我们需要定义一个数组:int pre[1000]; (数组长度依题意而定)。这个数组记录了每个人的上级是谁。这些人从0或1开始编号(依题意而定)。
int find(int x)
{
while(pre[x] != x)
x = pre[x];
return x;
}
并:join(x,y)的执行逻辑如下:
1、寻找 x 的根节点);
2、寻找 y 的根节点;
3、如果 x 和 y 不相等,则随便选一个人作为另一个人的上级,如此一来就完成了 x 和 y 的合并。
void join(int x,int y)
{
int fx=find(x), fy=find(y);
if(fx != fy)
pre[fx]=fy;
}