并查集和带权并查集(算法总结)

并查集

what:并查集是一种用来管理元素分组情况的数据结构。

作用:1.查询元素a,b是否属于同一组。

           2.合并元素a,b所在的组。

结构:树形,不是二叉树。

注意:防止树形结构发生退化,将所有元素找到她的根节点,让其父结点,直接为他的根节点,方便查询。

并查集模板:

1.查找:

        1》递归模式(复杂度高,不建议使用。

int find(int v)
{
    if(fa[v]==v)
        return v;
    else
    {
        fa[v]=find(fa[v]);//路径压缩
        return fa[v];
    }
}

        2》循环模式

int find(int x)
{
	int r = x;
	while (r != fa[x])
	{
		r = fa[x];
	}
	int i = x, j;
	while (fa[i] != r)
	{
		j = fa[i];
		fa[i] = r;
		i = j;
	}
	return r;
}

2.合并

       

void unite(int x, int y)
{
	int fx = find(x);
	int fy = find(y);
	if (fx != fy)
	   fa[y] = x;
	
}

带权并查集:唯一的不同之处在于他含有一个v数组储存权值。根据不同情况,推出某状态下权值的关系(可记录多种,以情况而定)。记录。

带权并查集大神详解:https://agatelee.cn/2017/05/%E5%B8%A6%E6%9D%83%E5%B9%B6%E6%9F%A5%E9%9B%86/

猜你喜欢

转载自blog.csdn.net/fighting_yifeng/article/details/81366684
今日推荐