一定注意每一次都要是 $root[cur]=root[cur-1]$,不然进行合并时如果 $a,b$ 在同一集合中就会使 $root[cur]=0$.

Code:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
//ty==1 for size, ty==0 for fathervoid setIO(string a){ freopen((a+".in").c_str(),"r",stdin); }#define maxn 200005
int n,m,cur,root[maxn*4];
struct Node{ int f,siz; Node(int f=0,int siz=0):f(f),siz(siz){}
};
struct Segment_Tree{int lson[maxn*50],rson[maxn*50],fa[maxn*50],siz[maxn*50];int nodes;void build(int l,int r,int &o){if(l>r)return;o=++nodes;if(l==r) { siz[o]=1,fa[o]=l; return; }int mid=(l+r)>>1;build(l,mid,lson[o]), build(mid+1,r,rson[o]);}  int update(int l,int r,int o,int pos,int ty,int k){int oo=++nodes;lson[oo]=lson[o],rson[oo]=rson[o],fa[oo]=fa[o],siz[oo]=siz[o];if(l==r) { if(ty==1) siz[oo]=k;  if(ty==0) fa[oo]=k;return oo;}int mid=(l+r)>>1;if(pos<=mid) lson[oo]=update(l,mid,lson[o],pos,ty,k);else rson[oo]=update(mid+1,r,rson[o],pos,ty,k);return oo;}Node query(int l,int r,int o,int pos){if(l==r){ return Node(fa[o],siz[o]); }int mid=(l+r)>>1;if(pos<=mid) return query(l,mid,lson[o],pos);else return query(mid+1,r,rson[o],pos);}Node find(int x,int state){Node p=query(1,n,root[state],x);return p.f==x?p:find(p.f,state);}void merge(int a,int b,int state){Node x=find(a,state), y=find(b,state);if(x.f==y.f) return;if(x.siz>y.siz) root[cur]=update(1,n,root[state],x.f,1,y.siz+x.siz),root[cur]=update(1,n,root[cur],y.f,0,x.f);else root[cur]=update(1,n,root[state],y.f,1,y.siz+x.siz),root[cur]=update(1,n,root[cur],x.f,0,y.f);}int ask(int a,int b,int state){Node x=find(a,state),y=find(b,state);if(x.f==y.f)return 1; return 0;}
}S;
int main(){// setIO("input");int opt,a,b,lastans=0;scanf("%d%d",&n,&m);S.build(1,n,root[0]);for(cur=1;cur<=m;++cur){scanf("%d",&opt);root[cur]=root[cur-1];switch(opt){case 1: { scanf("%d%d",&a,&b),a^=lastans,b^=lastans,S.merge(a,b,cur-1); break;}case 2: { scanf("%d",&a),a^=lastans,root[cur]=root[a]; break;}case 3: { scanf("%d%d",&a,&b),a^=lastans,b^=lastans,lastans=S.ask(a,b,cur-1),printf("%d\n",lastans); break;}}}return 0;
}

  

转载于:https://www.cnblogs.com/guangheli/p/10087451.html

洛谷P3402 【模板】可持久化并查集相关推荐

  1. 洛谷P1536村村通(并查集模板题)

    问题出处: https://www.luogu.com.cn/problem/P1536 题目描述: 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 " ...

  2. 洛谷 p1197 [JSOI2008]星球大战(并查集)

    洛谷 P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了 ...

  3. 洛谷 P1892 [BOI2003]团伙(并查集变种 反集)

    [BOI2003]团伙 题目描述 现在有 n n n 个人,他们之间有两种关系:朋友和敌人.我们知道: 一个人的朋友的朋友是朋友 一个人的敌人的敌人是朋友 现在要对这些人进行组团.两个人在一个团体内当 ...

  4. 洛谷1196 银河英雄传说(并查集)

    传送门 [题目分析] 题目整个就一赤裸裸的并查集啊....就多了一个记录深度.... 每次M操作就是merge x->y,每个并查集,记录父亲.大小.深度三个值,每次find父亲的时候记录深度即 ...

  5. 洛谷P1536 村村通【并查集】

    题目链接:P1536 村村通 程序说明: n个集合需要用n - 1条线连接起来,因此合并完集合后,循环遍历所有点,记录集合的总数,减一则为正确答案 代码如下: #include <iostrea ...

  6. 洛谷.3919.[模板]可持久化数组(可持久化线段树/平衡树)

    题目链接 //利用先前的根节点建树 想一下不难写. #include <cstdio> #include <cctype> //#define gc() getchar() # ...

  7. [洛谷P3940]:分组(贪心+并查集)

    题目传送门 题目描述 小$C$在了解了她所需要的信息之后,让兔子们调整到了恰当的位置.小$C$准备给兔子们分成若干个小组来喂恰当的胡萝卜给兔子们吃. 此时,$n$只兔子按一定顺序排成一排,第$i$只兔 ...

  8. 【洛谷】P2814 家谱(并查集)**

    穿越隧道 需要注意输入输出的使用 以及查找某个字符串的父亲字符串,这种数据结构若没想清直接用string p[N],是行不通的.: N为整型,不能为字符串.看到大佬的题解,有的使用的是map<s ...

  9. 洛谷P4768 [NOI2018]归程 [可持久化并查集,Dijkstra]

    题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时 ...

  10. [NOI2018] 归程 可持久化并查集

    题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个n 个节点.m 条边的无向连通图(节点的编号从 1至 n).我们依次用 l,a描述一条边的长度.海拔. ...

最新文章

  1. 广东2021高考成绩查询6,2021全国高考6月10日全部结束 预计最快6月23日可查高考成绩...
  2. 一个中科院退学博士生的感想(zz)
  3. 3.1 SVM原理入门
  4. Nutanix,在转型的道路上越走越远 | 人物志
  5. (34)css光标属性cursor
  6. uml类图用什么软件画_为什么需要UML类图建模?
  7. python初级第三库(人工智能,web解析,人机交互)
  8. inotify+rsync实时双向同步文件
  9. Spring boot工程创建
  10. java随机数种子_使用种子的Java随机数
  11. 半导体器件物理【6】固体量子——各种电子有效质量 + 状态密度函数
  12. Unix环境高级编程—进程控制(三)
  13. 介绍一种AI的抠图方法
  14. oracle查询数字类溢出,有趣的数值溢出(一)
  15. Android 4.2虚拟按键背景透明,Android 4.0 隐藏虚拟按键(导航栏)的方法
  16. Python使用Eel和HTML开发桌面应用
  17. JAVA计算机毕业设计晨光文具店进销存系统设计与开发计算机(附源码、数据库)
  18. XENOGEARS,延续万年的的永恒之爱(引)
  19. 【中科院】分子生物学-朱玉贤第四版-笔记-第11-12讲 基因功能研究技术
  20. android智能识别技术,基于Android平台的OCR识别技术研究与实现

热门文章

  1. 超声声场模拟_3D打印全息透镜聚焦超声在低成本脑成像中的应用
  2. 力扣 验证二叉搜索树
  3. 苹果手机没充满电就拔下,会对电池造成伤害吗?
  4. 如何区分USB接口类型
  5. 对于长期需要输出内容的来说,不管公域还是私-域
  6. 为什么你说的话别人不愿意听?
  7. 没钱没资本可以创业不,想创业的人怎么办
  8. 知识与智慧的区别是什么?
  9. 为什么很多人赚不到钱?
  10. 在实际工作中,WPS对比office,谁更强?