可持久化并查集
来源:互联网 发布:淘宝卖保健品怎么样 编辑:程序博客网 时间:2024/05/12 14:27
传送门1
传送门2
写法和主席树相似,具体我觉得自己YY就可以想出来的
就是用可持久化线段树来修改就好了,还有加上路径压缩和启发式合并
然后也不多说,上代码:(1A,强制在线版)
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define ll long longusing namespace std;inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); return x*f;}const int N=2e5+5,M=N*60;struct node{int ls,rs,val,size;}t[M];int n,m,sz;int root[N];inline void build(int &now,int l,int r){ now=++sz; if(l==r){t[now].val=l;t[now].size=1;return;} int mid=(l+r)>>1; build(t[now].ls,l,mid); build(t[now].rs,mid+1,r);}int num1,num2,pos,c1,c2;inline void query(int now,int l,int r){ if(l==r){num1=t[now].val;num2=t[now].size;return;} int mid=(l+r)>>1; if(pos<=mid)query(t[now].ls,l,mid); else query(t[now].rs,mid+1,r);}inline void insert(int &now,int pre,int l,int r){ now=++sz;t[now]=t[pre]; if(l==r){if(c1)t[now].val=c1;if(c2)t[now].size=c2;return;} int mid=(l+r)>>1; if(pos<=mid)insert(t[now].ls,t[pre].ls,l,mid); else insert(t[now].rs,t[pre].rs,mid+1,r);}inline int find(int now,int x){ pos=x;query(root[now],1,n); int fa=num1; if(fa==x)return x; fa=find(now,fa); c1=fa;c2=0;pos=x; insert(root[now],root[now],1,n); return fa;}inline void merge(int now,int a,int b){ int sa,sb,fa=find(now,a),fb=find(now,b); pos=fa;query(root[now],1,n);sa=num2; pos=fb;query(root[now],1,n);sb=num2; if(sa<sb)swap(sa,sb); c1=0;c2=sa+sb;pos=fa;insert(root[now],root[now],1,n); c1=fa;c2=0;pos=fb;insert(root[now],root[now],1,n);}int main(){ n=read();m=read(); build(root[0],1,n); int opt,a,b,k; int lastans=0; for(int i=1;i<=m;i++){ opt=read(); if(opt==1){ root[i]=root[i-1]; a=read()^lastans;b=read()^lastans; merge(i,a,b); } else if(opt==2){ k=read()^lastans; root[i]=root[k]; } else{ root[i]=root[i-1]; a=read()^lastans;b=read()^lastans; int fa=find(i,a),fb=find(i,b); if(fa==fb)printf("1\n"); else printf("0\n"); } } return 0;}
阅读全文
0 0
- [BZOJ3673]可持久化并查集
- [bzoj3673]可持久化并查集
- 可持久化并查集
- 可持久化并查集
- BZOJ 3673 可持久化并查集 by zky 可持久化并查集
- BZOJ 3674 可持久化并查集加强版 可持久化并查集
- [BZOJ 3674]可持久化并查集加强版:可持久化并查集
- 【可持久化并查集】BZOJ3674[可持久化并查集加强版]题解
- 【BZOJ】【P3673】【可持久化并查集】【题解】
- BZOJ3673 可持久化并查集 by zky
- [BZOJ3674]可持久化并查集加强版
- bzoj3673 可持久化并查集 by zky
- bzoj 3674 可持久化并查集加强版
- bzoj3673 可持久化并查集by zky
- bzoj3674 可持久化并查集加强版
- BZOJ 3673: 可持久化并查集 by zky
- 可持久化并查集rope大法
- 3674: 可持久化并查集加强版
- 实现顺序表多种操作(removeall、冒泡排序等)
- 网址
- nginx安装配置
- Effective C++之四:设计与声明
- CarbonData编译、安装和集成Spark 2.2
- 可持久化并查集
- 消息队列使用的四种场景介绍
- MNIST
- maven -install 报错:实际参数列表和形式参数列表长度不同
- 4.dubbo启动时检查
- rxjava2 + retrofit上传文件示例
- 学习三大框架Struts2 、 Hibernate 、 Spring时,涉及到三大框架的配置文件以及整合。
- repositoryItemButtonEdit1控件的按钮点击
- java IO基础 学习总结