题目大意:让你实现一个可持久化的并查集(3674强制在线)。

解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了。

正解应该是主席树||可持久化平衡树,然而rope就是可持久化平衡树呵!

只需将rope当做数组般使用,并查集即可。

BZOJ3673 C++ Code:

  1. #include<cstdio>
  2. #include<ext/rope>
  3. typedef __gnu_cxx::rope<int> rp;
  4. rp *f[20005];
  5. int n,m,i;
  6. int a[20005];
  7. int dad(int x){
  8. int p;
  9. if((p=f[i]->at(x))==x)return x;
  10. f[i]->replace(x,dad(p));
  11. return f[i]->at(x);
  12. }
  13. int main(){
  14. scanf("%d%d",&n,&m);
  15. for(i=0;i<=n;++i)a[i]=i;
  16. f[0]=new rp(a,a+n+1);
  17. for(i=1;i<=m;++i){
  18. f[i]=new rp(*f[i-1]);
  19. int op;
  20. scanf("%d",&op);
  21. if(op==1){
  22. int u,v;
  23. scanf("%d%d",&u,&v);
  24. u=dad(u),v=dad(v);
  25. if(u!=v)f[i]->replace(v,u);
  26. }else
  27. if(op==2){
  28. int t;
  29. scanf("%d",&t);
  30. f[i]=new rp(*f[t]);
  31. }else{
  32. int u,v;
  33. scanf("%d%d",&u,&v);
  34. printf("%d\n",dad(u)==dad(v)?1:0);
  35. }
  36. }
  37. return 0;
  38. }

而对于3674,唯一的问题就是路径压缩时,如果结果与当前值相等,就不需要更改值了,否则会炸内存MLE!

BZOJ3674 C++ Code:

  1. #include<cstdio>
  2. #include<ext/rope>
  3. typedef __gnu_cxx::rope<int> rp;
  4. rp *f[200005];
  5. int n,m,i,lst;
  6. int a[200005];
  7. int dad(int x){
  8. int p;
  9. if((p=f[i]->at(x))==x)return x;
  10. p=dad(p);
  11. if(f[i]->at(x)==p)return p;
  12. f[i]->replace(x,p);
  13. return f[i]->at(x);
  14. }
  15. int main(){
  16. scanf("%d%d",&n,&m);
  17. for(i=0;i<=n;++i)a[i]=i;
  18. f[0]=new rp(a,a+n+1);
  19. for(i=1;i<=m;++i){
  20. f[i]=new rp(*f[i-1]);
  21. int op;
  22. scanf("%d",&op);
  23. if(op==1){
  24. int u,v;
  25. scanf("%d%d",&u,&v);
  26. u=dad(u^lst),v=dad(v^lst);
  27. if(u!=v)f[i]->replace(v,u);
  28. }else
  29. if(op==2){
  30. int t;
  31. scanf("%d",&t);
  32. f[i]=new rp(*f[t^lst]);
  33. }else{
  34. int u,v;
  35. scanf("%d%d",&u,&v);
  36. u^=lst;v^=lst;
  37. printf("%d\n",lst=dad(u)==dad(v)?1:0);
  38. }
  39. }
  40. return 0;
  41. }

[BZOJ3673&3674]可持久化并查集&加强版的更多相关文章

  1. [bzoj3673/3674可持久化并查集加强版]

    n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2 ...

  2. BZOJ 3674 可持久化并查集加强版(路径压缩版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  3. BZOJ 3674 可持久化并查集加强版(按秩合并版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  4. 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  5. bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)

    CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...

  6. BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树

    既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...

  7. BZOJ 3674 可持久化并查集加强版(主席树变形)

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2515  Solved: 1107 [Submit][Sta ...

  8. bzoj 3674: 可持久化并查集加强版 (启发式合并+主席树)

    Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了!ndsf:暴力就可以轻松虐!zky:…… ...

  9. BZOJ3673/3674:可持久化并查集

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

随机推荐

  1. 手机上最简洁的"云笔记"软件

    ❗️注意:该文并不是真的给你介绍各类云笔记的对比 第三方云笔记的缺点 以前用MIUI和Flyme时,自带的记事本很好用,小巧简洁,路上想起什么就写下来,回去后登录网上的个人中心,拿出来加工一下就可以发 ...

  2. ZBrush中Nudge推动笔刷介绍

    本文我们来介绍Nudge推动笔刷,该笔刷在使用时能够产生旋转涂抹的效果,Nudge笔刷允许您在模型表面移动顶点,而这些移动的顶点仍然停留在模型的原来的表面,它与Move笔刷还是不同的,利用Move笔刷 ...

  3. JWT加密

    JWT是一种加密算法,为了防止请求的信息在传输途中被拦截修改 JWT的引用: install-package jwt JWF由三部分组成:Header,Payload,Signature Payloa ...

  4. 使用ajax实现搜索功能

      最近要做一个搜索功能,网上搜了一圈,终于做出来了,很简单的一个,这里分享我的方法,希望对大家有用,不足之处还请指教. 这里使用ajax提交数据,配合jquery将数据显示出来. 用jq的keyup ...

  5. [HDU1195]Open the Lock

    题目大意:给你一个4位数的初始状态(只包含1~9),要求你变化成另一个4位数. 变化规则为:每次可给任意一位加1或减1(1减1变为9,9加1变为1),或交换相邻两个数位上的数字(第一位和最后一位不相邻 ...

  6. Mysql字段合并

    现有数据 合并字段显示:利用GROUP_CONCAT(course,":","score") 严格区分大小写!GROUP_CONCAT 复制代码 SELECT ...

  7. 使用 satis 搭建 composer 本地仓库

    环境 windows nginx php composer 安装 拉取 satis 项目包,并拉取项目依赖 composer create-project composer/satis --stabi ...

  8. 洛谷10月月赛II

    #A: P4924 [1007]魔法少女小Scarlet 这道题考了矩阵旋转 其实很考验推公式的能力和代码能力 这里有个小技巧 可以设(x, y)为原点,然后去推公式,然后实际操作中横坐标加上x,纵坐 ...

  9. 异构关系数据库(MySql与Oracle)之间的数据类型转换参考

    一.MySQL到Oracle的数据类型的转变: 编号 MySQL ToOracle Oracle 1 GEOMETRY BLOB BLOB 2 GEOMETRYCOLLECTION BLOB BLOB ...

  10. Jquery-操作select下拉菜单

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...