P3402 【模板】可持久化并查集
//minamoto
#include<bits/stdc++.h>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
int read(){
int res,f=1;char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=2e5+5;
int n,m,fa[N<<5],dep[N<<5],L[N<<5],R[N<<5],rt[N],cnt;
void build(int &p,int l,int r){
p=++cnt;if(l==r)return (void)(fa[p]=l);
int mid=(l+r)>>1;
build(L[p],l,mid),build(R[p],mid+1,r);
}
void upd(int &p,int las,int l,int r,int x,int v){
p=++cnt;if(l==r)return (void)(fa[p]=v,dep[p]=dep[las]);
L[p]=L[las],R[p]=R[las];int mid=(l+r)>>1;
x<=mid?upd(L[p],L[las],l,mid,x,v):upd(R[p],R[las],mid+1,r,x,v);
}
int query(int p,int l,int r,int x){
if(l==r)return p;int mid=(l+r)>>1;
return x<=mid?query(L[p],l,mid,x):query(R[p],mid+1,r,x);
}
void add(int p,int l,int r,int x){
if(l==r)return (void)(++dep[p]);
int mid=(l+r)>>1;
x<=mid?add(L[p],l,mid,x):add(R[p],mid+1,r,x);
}
int find(int id,int x){
int fat=query(id,1,n,x);
return x==fa[fat]?fat:find(id,fa[fat]);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),build(rt[0],1,n);
for(int i=1;i<=m;++i){
int op=read();
switch(op){
case 1:{
int x=read(),y=read();rt[i]=rt[i-1];
int fatx=find(rt[i],x),faty=find(rt[i],y);
if(fatx==faty)continue;if(dep[fatx]>dep[faty])swap(fatx,faty);
upd(rt[i],rt[i-1],1,n,fa[fatx],fa[faty]);
if(dep[fatx]==dep[faty])add(rt[i],1,n,fa[faty]);
break;
}
case 2:{
int k=read();rt[i]=rt[k];
break;
}
case 3:{
int x=read(),y=read();rt[i]=rt[i-1];
int fatx=find(rt[i],x),faty=find(rt[i],y);
puts(fatx==faty?"1":"0");
break;
}
}
}
return 0;
}
P3402 【模板】可持久化并查集的更多相关文章
- 【模板】【P3402】可持久化并查集
(题面来自洛谷) 题目描述 n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 ...
- 洛谷P3402 【模板】可持久化并查集 [主席树,并查集]
题目传送门 可持久化并查集 n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 ...
- 【洛谷 P3402】 【模板】可持久化并查集
题目链接 可持久化并查集,就是用可持久化线段树维护每个版本每个节点的父亲,这样显然是不能路径压缩的,否则我们需要恢复太多状态. 但是这并不影响我们启发式合并,于是,每次把深度小的连通块向深度大的上并就 ...
- bzoj3673 & bzoj3674 & 洛谷P3402 可持久化并查集
题目:bzoj3673:https://www.lydsy.com/JudgeOnline/problem.php?id=3673 bzoj3674:https://www.lydsy.com/Jud ...
- 「luogu3402」【模板】可持久化并查集
「luogu3402」[模板]可持久化并查集 传送门 我们可以用一个可持久化数组来存每个节点的父亲. 单点信息更新和查询就用主席树多花 一个 \(\log\) 的代价来搞. 然后考虑如何合并两个点. ...
- 洛谷P3402 可持久化并查集
n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 说是可持久化并查集,实际上是 ...
- 算法笔记--可撤销并查集 && 可持久化并查集
可撤销并查集模板: struct UFS { stack<pair<int*, int>> stk; int fa[N], rnk[N]; inline void init(i ...
- bzoj3674 可持久化并查集
我是萌萌的任意门 可持久化并查集的模板题-- 做法好像很多,可以标号法,可以森林法. 本来有O(mloglogn)的神算法(按秩合并+倍增),然而我这种鶸渣就只会写O(mlog2n)的民科算法--再加 ...
- [bzoj] 3673 3674 可持久化并查集 || 可持久化数组
原题 加强版 题意: 可持久化并查集模板-- 题解: 用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态. 不能用路径压缩,但是要按置合并,使复杂度保证在O(log) #include&l ...
- Luogu 3402 可持久化并查集
点开这题纯属无聊……不过既然写掉了,那就丢一个模板好了 不得不说,可持久化并查集实现真的很暴力,就是把并查集的数组弄一个主席树可持久化. 有一点要注意的是不能写路径压缩,这样跳版本的时候会错,所以弄一 ...
随机推荐
- Leetcode 149.直线上最多的点数
直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o ...
- C语言不容易识别的坑
1.重复两次定义 #include<stdio.h> #include<stdlib.h> #include<string.h> int a,b; void fun ...
- 莫比乌斯反演套路一--令t=pd--BZOJ2820: YY的GCD
t<=10000组询问:有多少x,y,满足$x\epsilon [1,n],y\epsilon [1,m],(x,y)为质数$.n,m<=1e7. 首先式子列出来,f(i)--1<= ...
- 【IntelliJ 】IntelliJ IDEA 15 创建maven项目
说明 创建Maven项目的方式:手工创建 好处:参考IntelliJ IDEA 14 创建maven项目二(此文章描述了用此方式创建Maven项目的好处)及idea14使用maven创建web工程(此 ...
- ***CSS总结-原创
CSS规则 第一个是:选择符.和jquery的选择器是一个意思大括号是:申明块里面KV是:属性和属性值分号是结束符 类别选择符(器) p.red的意思,就是对p标签中类为red的进行CSS作用 ID选 ...
- [bzoj1978][BeiJing2010]取数游戏 game_动态规划_质因数分解
取数游戏 game bzoj-1978 BeiJing-2010 题目大意:给定一个$n$个数的$a$序列,要求取出$k$个数.假设目前取出的数是$a_j$,那么下次取出的$a_k$必须保证:$j&l ...
- <项目><day11>查看用户浏览过的商品
<项目>查看用户浏览过的商品 1.创建一个entity包储存实体对象 1.1创建一个Product的类存储实体对象 对象具有以下属性,并添加set和get方法,含参和不含参的构造方法,to ...
- easyui webuploader 文件上传演示
webuploader 上传首页 webuploader 上传前页面 webuploader 上传中页面 图就不上传了,状态会编程上传中 webuploader 已上传页面
- Mybatis中insert中返回主键ID的方法
<insertid=“doSomething"parameterType="map"useGeneratedKeys="true"keyProp ...
- 基于cocos2d开发的android小游戏——採花仙
/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...