首页 > 其他分享 >并查集撤销操作

并查集撤销操作

时间:2023-10-31 16:55:06浏览次数:40  
标签:ix int 查集 撤销 fa 操作 find op

并查集撤销操作

路径压缩会破坏原本的树结构,使得删除操作变得困难,所以使用按秩合并。
有n个元素,将点x从他当前所在的集合中分离,可以建立一个新的点idx=n++,将fa[x]=idx。

#include<bits/stdc++.h>
#define MAXN 200100
using namespace std;
int n,m;
int rk[MAXN],fa[MAXN];
int x,y,z;
int find(int x){//循环找爹
    while(x!=fa[x]){
        x=fa[x]=fa[fa[x]];
    }
    return x;
}

int ix=n;

void del(int x){//撤销
    fa[x]=ix;
    fa[ix]=ix;
	ix++;
}

void merge(int x,int y){//按秩合并
	x=find(x);y=find(y);
	if(x==y)return ;
	if(rk[x]<=rk[y]){
        fa[x]=y;
        return;
    }
    else{
        fa[y]=x;
        return ;
    }
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        rk[i]=0;
        fa[i]=i;
    }
    int op,x,y;
    for(int i=1;i<=m;i++){
        cin>>op>>x;

        if(op==1){//合并
            cin>>y;
            merge(x,y);        
        }

        if(op==2){//撤销
            del(x);
        }
        if(op==3){
            cin>>y;
            if(find(x)==find(y)){//查找两个元素是否在同一个集合
                cout<<"y";
            }
            else{
                cout<<"n";
            }
            cout<<endl;
        }                                                                   
     }
    
    return 0;
}




标签:ix,int,查集,撤销,fa,操作,find,op
From: https://www.cnblogs.com/DAIANZE/p/17800665.html

相关文章

  • 安防视频监控平台EasyCVR(V.3.4)新功能:告警查询操作步骤
     视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼宇、校园、仓储等场......
  • 02_jQuery DOM操作
    目录一、jQuery对象访问each(callback)size()和lengthselectorcontextget([index])index([selector|element])二、数据缓存data([key],[value])removeData([name|list])三、属性操作属性attr(name|pro|key,val|fn)removeAttr(name)prop(n|p|k,v|f)removeProp(name)attr()方法和......
  • IDEA基本操作
    IDEA基本操作1IDEA常用快捷键快速生成main方法和输出语句main方法:main或者psvm,回车输出语句:sout,回车常用快捷键Ctrl+D:复制数据到下一行Ctrl+X:剪切数据,可以用来删除所在行Ctrl+Alt+L:格式化代码,建议自己写代码的时候就注意格式Ctrl+/:对选中的代码添加单行注释,如果想取消注......
  • Python中的切片操作
    一、切片操作的基本概念1.1切片是什么?切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。1.2切片的语法切片的基本语法为:sequence[start:end:step]其中,sequence表示待切片的序列,start表......
  • java8 集合操作功能
    Java8引入了许多新的集合操作功能,包括但不限于以下几项:forEach:使用Lambda表达式遍历集合中的每个元素。stream:将集合转换为流,以便进行各种操作,如过滤、映射、排序等。filter:根据指定的条件过滤集合中的元素,并返回过滤后的结果。map:将集合中的每个元素映射为另一个元素,并返回......
  • 关于操作符的补充
    关于操作符的补充上次我们已经说了+,-,*,/,那一节,作为C刚刚入门的新手,写的不好庆幸的是说的是加减乘除今天我们说一些常常使用的一些1,sizeof运算符和sizet类型sizeof运算符以字节为单位返回运算对象的大小(在C中,1字节定义为char类型占用的空间大小。过去,1字节通常是8位,但是一些字符集......
  • Shell脚本操作OSS服务:PUT、GET(纯shell脚本无sdk)
    Shell脚本操作OSS服务:PUT、GET(纯shell脚本无sdk)前提:一般情况下对OSS操作都会通过SDK,但是很多情况下对OSS进行简单的上传下载的操作,那么SDK就显得有些臃肿,先要下载sdk包,然后再写些简单的操作脚本,而通过shell脚本就会简单很多。而且很多场景:线上网站、数据库等,生产出来的网站数据、......
  • [学习笔记]扩展域并查集
    扩展域并查集可以维护类似于P1892[BOI2003]团伙的题目。题目中有两种关系:朋友和敌人,并规定一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友引入反集的概念,例如有三个人\(a,b,c\),他们的反集为\(a',b',c'\)。如果\(a,b\)为敌人,连接\(a,b'\)和\(a',b\);如果\(a,......
  • JS_0077:JS 中对象操作 preventExtensions 禁止添加新属性 defineProperty 添加新属性
    1,//这是定义一个对象constnonExtensible={removalbe:true};//这是通过preventExtensions方法令指定对象无法再添加新的属性Object.preventExtensions(nonExtensib......
  • MySQL系列:binlog日志详解(参数、操作、GTID、优化、故障演练)
    目录简介作用系统参数--log_bin--server_id--binlog_format--sync-binlog(双一标准)--gtid-mode(gtid)--enforce-gtid-consistency(gtid)--expire-logs-day(优化参数)--binlog_cache_size(优化参数)--max_binlog_cache_size(优化参数)--max_binlog_size(优化参数)sql_log_bin日志操作开启日......