思路:

用主席树维护并查集森林,每次连接时新增结点。
似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?
3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直接吊打暴力程序。

 #include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=,SIZE=;
class PresistentDisjointSet {
private:
unsigned int left[SIZE],right[SIZE],sz;
int anc[SIZE];
unsigned int newnode() {
return sz++;
}
unsigned int getpos(const unsigned int p,const int b,const int e,const int x) {
if(b==e) return p;
int mid=(b+e)>>;
return (x<=mid)?getpos(left[p],b,mid,x):getpos(right[p],mid+,e,x);
}
public:
unsigned int root[N];
PresistentDisjointSet() {
sz=;
}
void Build(unsigned int &p,const int b,const int e) {
p=newnode();
if(b==e) {
anc[p]=b;
return;
}
int mid=(b+e)>>;
Build(left[p],b,mid);
Build(right[p],mid+,e);
}
unsigned int find(const unsigned int p,const int b,const int e,const int x) {
int q=getpos(p,b,e,x);
return x==anc[q]?q:find(p,b,e,anc[q]);
}
unsigned int Union2(const unsigned int p,const int b,const int e,const int x,const int y) {
unsigned int new_p=newnode();
if(b==e) {
anc[new_p]=y;
return new_p;
}
int mid=(b+e)>>;
if(x<=mid) left[new_p]=Union2(left[p],b,mid,x,y),right[new_p]=right[p];
if(x>mid) right[new_p]=Union2(right[p],mid+,e,x,y),left[new_p]=left[p];
return new_p;
}
bool isConnected(const int x,const int y) {
return anc[x]==anc[y];
}
unsigned int Union(const unsigned int p,const int b,const int e,int x,int y) {
x=find(p,b,e,x),y=find(p,b,e,y);
if(isConnected(x,y)) return p;
return Union2(p,b,e,anc[x],anc[y]);
}
};
PresistentDisjointSet s;
int main() {
int n=getint(),lastans=;
s.Build(s.root[],,n);
int m=getint();
for(register int i=;i<=m;i++) {
int op=getint();
if(op==) s.root[i]=s.Union(s.root[i-],,n,getint()^lastans,getint()^lastans);
else if(op==) s.root[i]=s.root[getint()^lastans];
else s.root[i]=s.root[i-],printf("%d\n",lastans=s.isConnected(s.find(s.root[i],,n,getint()^lastans),s.find(s.root[i],,n,getint()^lastans)));
}
return ;
}

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

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

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

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

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

  3. 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)

    传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...

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

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

  5. 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树

    [BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...

  6. [BZOJ3673&3674]可持久化并查集&加强版

    题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...

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

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

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

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

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

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

随机推荐

  1. Ubuntu 16.04配置国内高速apt-get更新源【转】

    转自:https://blog.csdn.net/twang0x80/article/details/79782753 Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换 ...

  2. adb启动和停止android app方法

    一.启动app adb shell am start  包名/MainActivity 上面涉及到的包名及mainactivity获取办法 方法一: 1.adb shell 2.dumpsys act ...

  3. zabbix3.0.4导入中文模板后乱码问题处理

    通过yum安装方式部署了zabbix3.0.4监控服务器,配置过程中发现当导入的模板中有中文时,图中的中文会变成方块 如下图所示: 这个问题是由于zabbix的web端没有中文字库,我们最需要把中文字 ...

  4. css之hover改变子元素和其他元素样式

    参考地址:链接 +表示下一级元素,>表示子元素 <!DOCTYPE html> <html> <head lang="en"> <m ...

  5. 彻底理解this指向-----实例分析

    this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个. 情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是wind ...

  6. php 注册树(注册模式)

    * 注册树:其实就是创建一个对象集,也叫对象池,是用数组来进行存储的 //先声明三个类,一会丢进对象树上中 class Demo1 {} class Demo2 {} class Demo3 {} / ...

  7. jmeter正则表达式提取器多模块相互调用

    提取return的结果 (1)例: 创建账户和转账功能 注:以下为soap协议 添加账户1 创建正则表达式提取器(提取创建的结果) 点击导入接口文档URL地址和方框内方法 同上方法添加账户2 点击正则 ...

  8. python 全栈开发,Day83(博客系统子评论,后台管理,富文本编辑器kindeditor,bs4模块)

    一.子评论 必须点击回复,才是子评论!否则是根评论点击回复之后,定位到输入框,同时加入@评论者的用户名 定位输入框 focus focus:获取对象焦点触发事件 先做样式.点击回复之后,定位到输入框, ...

  9. Visual Studio强大的帮助工具--Resharper安装与使用

    ReSharper是一个JetBrains公司出品的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.使用ReSharper,你可以进行深度代码分析,智能代码协 ...

  10. jQuery插件实践之轮播练习(一)

    所有文章搬运自我的个人主页:sheilasun.me 因为从来没写过jQuery插件,所以本文要通过一个轮播的例子,练习jQuery插件的写法. 新建插件文件 在讨论细节之前,先新建插件文件(当然也可 ...