zoukankan      html  css  js  c++  java
  • 并查集

    并查集

    之前对并查集一直不太熟悉,这次做题遇到了,就做一个简单记录

    并查集是什么

    并查集是一种管理元素分组的数据结构,可以①查询两个元素是否属于同一组,也可以②合并两个元素所属组。为树形结构,但不是二叉树

    并查集基本功能的实现

    int par[maxn]; //父亲
    int rk[maxn]; //树的高度
    void init(int n) //初始化n个元素
    {
    	int i;
    	for (i = 0; i < n; ++i)
    	{
    		par[i] = i; //初始化都让父亲指向自己
    	}
    	return;
    }
    int find(int x) //找根
    {
    	if (par[x] == x) //意味着找到根
    		return x;
    	else
    	{
    		return par[x] = find(par[x]); //找到根后将叶子直接指向根,以优化查询效率
    	}
    }
    void unite(int x, int y) //合并x,y所属的集合
    {
    	x = find(x);
    	y = find(y);
    	if (x == y) //如果x,y本就属于同一个集合,则不做操作
    		return;
    	if (rk[x] < rk[y]) //如果x所属树的高度小于y的,那么把根x的父亲指向y;反之,则根y的父亲指向x;
    		par[x] = y;
    	else
    	{
    		par[y] = x;
    		if (rk[x] == rk[y]) //如果两棵树原高度相同,则合并后高度+1
    			rk[x]++;
    	}
    	return;
    }
    
  • 相关阅读:
    Django
    Django
    Django
    6.1
    Django
    Django
    Django
    Django
    Django简介
    web应用/http协议/web框架
  • 原文地址:https://www.cnblogs.com/orangee/p/8686470.html
Copyright © 2011-2022 走看看