没什么好说的。

可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲。

Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的。。

 #include<bits/stdc++.h>
#define ll long long
#define N 20005
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,rt[N],tot;
int f[N*],ls[N*],rs[N*];
void build(int &x,int l,int r){
x=++tot;
if(l==r){f[x]=l;return;}
int mid=l+r>>;
build(ls[x],l,mid);
build(rs[x],mid+,r);
}
int find(int x,int l,int r,int pos){
if(l==r)return f[x];
int mid=l+r>>;
if(pos<=mid)return find(ls[x],l,mid,pos);
else return find(rs[x],mid+,r,pos);
}
void update(int pre,int &x,int l,int r,int pos,int val){
x=++tot;ls[x]=ls[pre];rs[x]=rs[pre];
if(l==r){f[x]=val;return;}
int mid=l+r>>;
if(pos<=mid)update(ls[pre],ls[x],l,mid,pos,val);
else update(rs[pre],rs[x],mid+,r,pos,val);
}
int findfa(int ti,int x){
int tmp=find(rt[ti],,n,x);
if(tmp==x)return x;
else{
tmp=findfa(ti,tmp);
update(rt[ti],rt[ti],,n,x,tmp);
return tmp;
}
}
void unite(int ti,int x,int y){
int fx=findfa(ti,x),fy=findfa(ti,y);
if(fx<fy)swap(x,y),swap(fx,fy);
if(fx!=fy)update(rt[ti],rt[ti],,n,fx,fy);
}
int main(){
n=read();m=read();
build(rt[],,n);
for(int i=;i<=m;i++){
rt[i]=rt[i-];
int t=read();
if(t==){
int x=read(),y=read();
unite(i,x,y);
}
else if(t==){
int k=read();rt[i]=rt[k];
}
else{
int x=read(),y=read();
findfa(i,x)==findfa(i,y)?puts(""):puts("");
}
}
return ;
}

3673: 可持久化并查集 by zky

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 1506  Solved: 677
[Submit][Status][Discuss]

Description

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

0<n,m<=2*10^4

Input

 

Output

 

Sample Input

5 6
1 1 2
3 1 2
2 0
3 1 2
2 1
3 1 2

Sample Output

1
0
1

【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树的更多相关文章

  1. BZOJ3673 可持久化并查集 by zky 可持久化 并查集

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3673 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...

  2. bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版

    bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...

  3. BZOJ3673 可持久化并查集 by zky 【主席树】

    BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...

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

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

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

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2170  Solved: 978[Submit][Status ...

  6. Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)

    3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...

  7. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

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

  8. bzoj 3673&3674: 可持久化并查集 by zky

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

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

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

随机推荐

  1. Qt Designer 修改窗体大小改变控件位置

    一.新建一个窗体 用qt designer 新建一个QWidget窗体, 在窗体中右键 选择布局, 发现布局是选择不了的,这个是因为窗体里面没有添加控件, 任意添加空间后便可选择 右键-- 布局-- ...

  2. siblings 使用

    //$(object).siblings().each(function () { // $(this).find("img").attr("class", & ...

  3. 内容分发网络CDN(互联网技术)

    内容分发网络(互联网技术)CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更 ...

  4. UE对一个很长的字符按16位自动换行

    ① ②设定16个位 ③ ④结果

  5. WCF服务寄宿应用程序

    1.先创建一个WCF服务库 2.创建一个Console控制台,服务将寄宿在该应用程序上,该程序一旦关闭,服务将停止. 控制台代码: using System; using System.Collect ...

  6. FAST特征点检测

    Features From Accelerated Segment Test 1. FAST算法原理 博客中已经介绍了很多图像特征检测算子,我们可以用LoG或者DoG检测图像中的Blobs(斑点检测) ...

  7. 背景虚化 Google Camera App Nokia Refocus HTC One M8 的 Duo景深相机

    背景虚化是单反中一种比较常见的拍照形式,参看 http://www.techbang.com/posts/%2017842 https://refocus.nokia.com/

  8. Android Fragment学习笔记(二)----Fragment界面添加和管理

    Fragment界面添加 了解过fragment的生命周期等简单知识,于是去看官方文档来了解更多相关内容,要添加fragment到我们的UI界面中,给出了两种常用的方法,第一个是在activity的布 ...

  9. 登录时的"记住我"

    当我们在做各个系统的登录界面时,喜欢在加上一个功能就是“记住我”, 我用js来实现一下看看 function SetCookie(name, value, expires, path, domain, ...

  10. python图像卷积

    import cv2import numpy as np #filier 2Dsavepath = "E:\\"image = cv2.imread('E:\\me.jpg');c ...