[bzoj3673]可持久化并查集
2016-04-13 19:52
351 查看
题目大意
实现一个可持久化并查集做法
用可持久化线段树或平衡树之类的维护一个可持久化数组就好了。这里我用了rope大法
#include<cstdio> #include<algorithm> #include<ext/rope> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; using namespace __gnu_cxx; const int maxn=20000+10; rope<int> *b[maxn]; int a[maxn]; int i,j,k,l,t,n,m,ans; bool czy; int getfa(int id,int x){ if (b[id]->at(x)==0) return x; b[id]->replace(x,getfa(id,b[id]->at(x))); return b[id]->at(x); } int main(){ czy=0; scanf("%d%d",&n,&m); fo(i,1,n) a[i]=0; b[0]=new rope<int> (a,a+n+1); fo(i,1,m){ b[i]=new rope<int> (*b[i-1]); scanf("%d",&t); if (t==1){ scanf("%d%d",&j,&k); if (czy) j^=ans,k^=ans; j=getfa(i,j); k=getfa(i,k); if (j!=k) b[i]->replace(k,j); } else if (t==2){ scanf("%d",&k); if (czy) k^=ans; b[i]=b[k]; } else{ scanf("%d%d",&j,&k); if (czy) j^=ans,k^=ans; j=getfa(i,j); k=getfa(i,k); if (j!=k) ans=0;else ans=1; printf("%d\n",ans); } } }
相关文章推荐
- 欢迎使用Markdown编辑器写博客
- matlab 错误使用*
- 数据库范式
- centos中pppoe每次重新启动都要设置的问题
- BZOJ 4012: [HNOI2015]开店
- Python decorator 1: 函数
- Android中Parcelable接口的应用
- 简单的分页
- JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)
- bzoj 4421: [Cerc2015] Digit Division
- 制作网页---html拾遗
- lightoj 1275 - Internet Service Providers 一元二次方程
- matlab学习笔记 函数bsxfun repmat
- git 回滚到某次commit
- c++中虚函数的实现机制
- App性能测试前需要了解的内存原理
- activity劫持反劫持
- 常用SVN命令行
- 虚基类与虚拟继承
- CMSIS RTOS RTX License