bzoj 3674 可持久化并查集加强版——可持久化并查集
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3674
用主席树维护 fa[ ] 和 siz[ ] 。改 fa[ ] 和改 siz[ ] 都是新建节点。
写成 rt[ i ] = rt[ i-1 ] ,因为跳到第 k 步之后的那个第 k 步不一定是一个 0 操作。
找 fa 就是在当前版本的主席树查很多次。可以路径压缩,就和改 fa[ ] 一样,覆盖当前版本。不过空间会很大(n*50都不行,n*70可以),而且还变慢了?
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int N=2e5+,M=N*;
int n,m,rt[N],ans;
int tot,ls[M],rs[M],vl[M],siz[M];
void build(int l,int r,int cr)
{
if(l==r){vl[cr]=l;siz[cr]=;return;}
int mid=l+r>>;
ls[cr]=++tot; build(l,mid,ls[cr]);
rs[cr]=++tot; build(mid+,r,rs[cr]);
}
void ins(int l,int r,int &cr,int pr,int p,int k)
{
cr=++tot;ls[cr]=ls[pr];rs[cr]=rs[pr];
if(l==r){vl[cr]=k;siz[cr]=siz[pr];return;}
int mid=l+r>>;
if(p<=mid)ins(l,mid,ls[cr],ls[pr],p,k);
else ins(mid+,r,rs[cr],rs[pr],p,k);
}
void add(int l,int r,int &cr,int pr,int p,int k)
{
cr=++tot;ls[cr]=ls[pr];rs[cr]=rs[pr];
if(l==r){vl[cr]=vl[pr];siz[cr]=siz[pr]+k;return;}
int mid=l+r>>;
if(p<=mid)add(l,mid,ls[cr],ls[pr],p,k);
else add(mid+,r,rs[cr],rs[pr],p,k);
}
int qry(int l,int r,int cr,int p)
{
if(l==r)return cr; int mid=l+r>>;//return cr not vl for qry siz
if(p<=mid)return qry(l,mid,ls[cr],p);
else return qry(mid+,r,rs[cr],p);
}
int fnd(int nw,int a)
{
int fa=qry(,n,nw,a);
if(a==vl[fa])return fa; fa=fnd(nw,vl[fa]);
ins(,n,nw,nw,a,vl[fa]);//fa[a]=fnd(fa[a])
return fa;
}
int main()
{
n=rdn();m=rdn();
rt[]=tot=;build(,n,rt[]);
for(int i=,op,u,v;i<=m;i++)
{
op=rdn();
if(op==)
{
rt[i]=rt[i-]; u=rdn();v=rdn();
u=fnd(rt[i],u^ans); v=fnd(rt[i],v^ans);
if(vl[u]==vl[v])continue;
if(siz[u]>siz[v])swap(u,v);
u=vl[u];v=vl[v]; ins(,n,rt[i],rt[i],u,v);
add(,n,rt[i],rt[i],v,siz[u]);
}
else if(op==){ u=rdn()^ans; rt[i]=rt[u];}
else
{
rt[i]=rt[i-]; u=rdn();v=rdn();
u=vl[fnd(rt[i],u^ans)]; v=vl[fnd(rt[i],v^ans)];
ans=(u==v); printf("%d\n",ans);
}
}
return ;
}
bzoj 3674 可持久化并查集加强版——可持久化并查集的更多相关文章
- BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树
既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...
- 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树
[BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...
- BZOJ 3674 可持久化并查集加强版 可持久化并查集
题目大意:同3673 强制在线 同3673 仅仅只是慢了一些0.0 这道题仅仅写路径压缩比仅仅写启示式合并要快一点点 两个都写就慢的要死0.0 改代码RE的可能是内存不够 #include<cs ...
- BZOJ3674 可持久化并查集加强版 可持久化 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...
- BZOJ 3674 可持久化并查集加强版(路径压缩版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- BZOJ 3674 可持久化并查集加强版(按秩合并版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- 【BZOJ】【3673】可持久化并查集 & 【3674】可持久化并查集加强版
可持久化并查集 Orz hzwer & zyf 呃学习了一下可持久化并查集的姿势……其实并查集就是一个fa数组(可能还要带一个size或rank数组),那么我们对并查集可持久化其实就是实现一个 ...
- BZOJ 3674 可持久化并查集加强版(主席树变形)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Submit: 2515 Solved: 1107 [Submit][Sta ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
随机推荐
- map和unordered_map
1.boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中. ...
- Docker安装及基础知识
一.安装 & 启动 1.安装Docker [root@tokyo ~]# yum install docker 2.启动Docker服务 (1)旧式的 sysv 语法 [root@tokyo ...
- Zookeeper架构、ZAB协议、选举
转载:深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制 (nice) ZooKeeper学习第六期---ZooKeeper机制架构 一.Zookee ...
- Netty高性能编程备忘录(上)
http://calvin1978.blogcn.com/articles/netty-performance.html 网上赞扬Netty高性能的文章不要太多,但如何利用Netty写出高性能网络应用 ...
- 数据库cmd窗口登录
mysql -uroot -p123 -P3306 -h127.0.0.1 -uroot::root数据库登录用户名 -p123:数据库密码123 -P3306::3306数据库的端口号 -h127. ...
- 【转载】oracle索引详解2
原文URL:http://justplayoop1.iteye.com/blog/1259562 一. 索引介绍 1.1 索引的创建 语法 : CREATE UNIUQE | BITMAP INDE ...
- TClientDataSet的FileName属性
读取cds文件数据. FileName一定要在设计时输入,否则程序运行时,不会自动读取cds文件. 因为FORM创建时,数据集组件也相应创建,如果是在运行时 设置FileName,那么是在数据集组件创 ...
- focusSNS学习笔记
FocusSNS是一个社交类型的网站架构 系统的加载过程 所有的分发都从RouteController开始 @RequestMapping(value={"/", "/h ...
- python 模块化管理,导入自己的模块(包)
很多东西似懂非懂,或者当时看懂了,但是感觉不是很重要,经常不用,时间久了,也就变得似懂非懂了.今天被某度电话面试问道一个问题,就是模块倒入,其实我之前也是很仔细的研究过的,不过由于平时做的东西太简单, ...
- MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(三)
MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...