zoukankan      html  css  js  c++  java
  • 并查集的实现

    利用并查集可以十分高效地判断两个元素是否在同一个集合中,下面是并查集的大致实现

    int par[MAX_N];//父亲
    int rank[MAX_N];//树的高度
    void init(int n)
    {
        for(int i=0;i<n;i++)
        {
            par[i]=i;
            rank[i]=0;
        }
    }


    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)return;
        if(rank[x]<rank[y])
        {
            par[x]=y;//如果x的高度小于y的高度,则x插到y的下层(减少树的退化)
        }
        else 
        {
            par[y]=x;//否则,y插入到x的下层
            if(rank[x]==rank[y])rank[x]++;
        }
    }


    bool same(int x,int y)
    {
        return find(x)==find(y);
    }

























  • 相关阅读:
    scrapy 中间件
    索引
    理解平均负载
    jquery1
    网络编程
    模块
    进程
    图书管理系统用ajax删除书籍
    mysql
    jquery
  • 原文地址:https://www.cnblogs.com/linruier/p/9485197.html
Copyright © 2011-2022 走看看