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

    并查集是一种用来管理元素分组情况的数据结构,并查集可以高效的进行如下操作。

    ●  查询元素a和元素b是否属于同一组。

    ●  合并元素a和元素b所在的组。

    首先初始化,n个节点来表示n个元素,最开始没有边

    void init(int n){
    	for(int i=1;i<=n;i++){
    		par[i]=i;
    		rank[i]=0;
    		
    	}
    

     接着需要查询树的根,我们知道per[son]=father,其中son是子节点,father是父节点,我们用per[i]指向的是其父节点,其中根节点per[root]==root。

    int find(int x){
    	if(par[x]==x) return x;
    	else return par[x]=find(par[x]);\\进行状态压缩
    }
    

     然后我们可以对不同集合进行合并,对于每棵树,记录这棵树的高度(rank),合并时rank小的连相rank大的边。

    void unite(int x,int y){
    	x=find(x);
    	y=find(y);
    	if(x==y) return ;
    	else{
    		if(rank[x]<rank[y]){
    			par[x]=y;
    		}else{
    			par[y]=x;
    			if(rank[x]==rank[y])	rank[x]++;
    		}
    	}
    }
    

     在此我们可以通过find()返回的根节点可知,若返回的根节点一样,则再同一集合,反之,不再同一集合

    bool same(int x,int y){
    	return find(x)==find(y);
    }
    
  • 相关阅读:
    Angular 学习笔记(四)
    Angular 学习笔记(三)
    Angular 学习笔记(二)
    Angular 学习笔记(一)
    ettercap + driftnet 实现同网段下流量欺骗
    kali 下使用 arpspoof 实现断网攻击
    JavaScript 语句
    vscode配置git及码云
    区块链入门
    C#情怀与未来
  • 原文地址:https://www.cnblogs.com/kksk/p/13081240.html
Copyright © 2011-2022 走看看