正题

题目链接:https://www.luogu.org/problemnew/show/P3402


题目大意

  1. 合并x,yx,yx,y所在的两个集合
  2. 回到操作kkk之后
  3. 询问x,yx,yx,y是否在同一个集合

解题思路

正常的并查集,不使用路径压缩,但是使用按秩合并,将深度小的合并到深度大的上面。

用主席树维护即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+100;
struct Tree_node{int ls,rs,l,r,deep,fa;
};
int n,m,cnt,root[N],edt;
struct Keep_tree{Tree_node t[N*40];void Build(int &x,int l,int r){x=++cnt;t[x].l=l;t[x].r=r;if(l==r){t[x].fa=l;return;}int mid=(t[x].l+t[x].r)/2;Build(t[x].ls,l,mid);Build(t[x].rs,mid+1,r);}Tree_node Query(int x,int pos){if(t[x].l==t[x].r)return t[x];if(pos<=t[t[x].ls].r) return Query(t[x].ls,pos);return Query(t[x].rs,pos);}void Insert(int x,int &y,int pos,int nef){y=++cnt;t[y]=t[x];if(t[x].l==t[x].r){t[y].fa=nef;return;}if(pos<=t[t[x].ls].r) Insert(t[x].ls,t[y].ls,pos,nef);else Insert(t[x].rs,t[y].rs,pos,nef);}void add(int x,int pos){if(t[x].l==t[x].r){t[x].deep++;return;}if(pos<=t[t[x].ls].r) add(t[x].ls,pos);else add(t[x].rs,pos);}
}Tree;
Tree_node find_fa(int ed,int x)
{Tree_node Fa=Tree.Query(root[ed],x);if(x==Fa.fa) return Fa;return find_fa(ed,Fa.fa);
}
void unionn(int x,int y)
{Tree_node Fa=find_fa(edt-1,x),Fb=find_fa(edt-1,y);if(Fa.fa==Fb.fa) return;if(Fa.deep<Fb.deep) swap(Fa,Fb);Tree.Insert(root[edt-1],root[edt],Fb.fa,Fa.fa);if(Fa.deep==Fb.deep)Tree.add(root[edt],Fa.fa);
}
int main()
{scanf("%d%d",&n,&m);Tree.Build(root[0],1,n);for(int i=1;i<=m;i++){int op,x,y;scanf("%d",&op);++edt;root[edt]=root[edt-1];if(op==1){scanf("%d%d",&x,&y);unionn(x,y);}if(op==2){scanf("%d",&x);root[edt]=root[x];}if(op==3){scanf("%d%d",&x,&y);if(find_fa(edt,x).fa==find_fa(edt,y).fa) printf("1");else printf("0");putchar('\n');}}
}

P3402-[模板]可持久化并查集【主席树】相关推荐

  1. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  2. 可持久化线段树【主席树】可持久化并查集【主席树+并查集】

    笼统的主席树原理 众所周知, 主席树是可以持久化的, 换言之你能知道你所维护信息的所有历史状态. 主席树是这样做的: 1. 首先建一颗朴素的线段树,代表初始状态 (下图黑色) , 也就是第0次操作后的 ...

  3. 可持久化4--可持久化并查集

    可持久化并查集 可持久化并查集 = 按秩合并并查集 + 可持久化数组 首先并查集不能采用路径压缩,这是因为一次findR操作中,fa数组的很多位置(u->ru)会发生修改,由于每次修改都需要在可 ...

  4. BZOJ5415:[NOI2018]归程(可持久化并查集,最短路)

    Description Input Output Sample Input1 1 4 3 1 2 50 1 2 3 100 2 3 4 50 1 5 0 2 3 0 2 1 4 1 3 1 3 2 S ...

  5. BZOJ 3673: 可持久化并查集 by zky

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

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

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

  7. bzoj 36733674 可持久化并查集加强版(可持久化线段树+启发式合并)

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

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

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

  9. Claris’ Contest # 2 Day 2 Problem C. Dash Speed(分治+可持久化并查集+树剖)

    题面 题解 \(std\)爆栈了→_→ 我们先考虑一个简化的问题,如果只有加边的情况下如何动态维护直径 合并两棵树时,设\(a,b\)为\(A\)的直径的两个端点,\(c,d\)为\(B\)的直径的两 ...

  10. 暑期集训5:并查集 线段树 练习题G: HDU - 1754

    2018学校暑期集训第五天--并查集 线段树 练习题G  --   HDU - 1754 I Hate It 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让 ...

最新文章

  1. Lr(2)-脚本调试之“集合点” 和 “事务”
  2. BCH将拥有远超过BTC的“最佳货币”体验
  3. 线上CPU100%?看看这篇是怎么排查的。
  4. linux shell 报错 Syntax error: Bad for loop variable
  5. 计算机英文文献博客,计算机专业外文文献论文翻译.docx
  6. mysql 免安装 配置_图解MySQL5.7.20免安装版配置方法
  7. 如何创建比C语言更快的编程语言?
  8. 蓝桥杯 ALGO-122 算法训练 未名湖边的烦恼
  9. matlab聚类实验,实验3Matlab聚类分析
  10. 位图保存到数据库 VC ado 类
  11. mac下复制粘贴需要多次的问题
  12. MAC 如何连接惠普打印机
  13. 百度地图InfoWindow添加点击事件
  14. TMS320C6748_ECAP_APWM
  15. 港中文旷视提出PanopticFCN:用于全景分割的全卷积网络
  16. AI如何挑战传统翻译
  17. android屏幕 录制检测,Android 录制屏幕的实现方法
  18. Wake-on-LAN(远端唤醒) 原理及实现
  19. snprintf()函数探讨
  20. 明年放假时间表总共29天7个节假日

热门文章

  1. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  2. 计算机常用编程英语词汇大全,计算机编程及常用术语英语词汇大全
  3. 单调谐回路谐振放大器等效电路分析_手把手教你如何分析三极管电路
  4. 快速修改HTML5,HTML5无刷新修改URL(示例代码)
  5. 有必要服务器虚拟化吗,服务器虚拟化有必要吗
  6. linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
  7. 用python画树_Python+Turtle动态绘制一棵树实例分享
  8. 你知道304吗?图解强缓存和协商缓存
  9. [JS-BOM]BOM_Window窗口对象
  10. [剑指offer]面试题34:丑数