BZOJ3674可持久化并查集(模板)
没什么可说的,就是一个可持久化线段树维护一个数组fa以及deep按秩合并好了
注意一下强制在线
蒟蒻的我搞了好长时间QAQ
贴代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
struct trnt{
int ls;
int rs;
int fa;
int dp;
}tr[];
int root[];
int siz;
int n,m;
int lastans;
void Tr_build(int l,int r,int &spc)
{
if(!spc)
spc=++siz;
if(l==r)
{
tr[spc].fa=l;
return ;
}
int mid=(l+r)/;
Tr_build(l,mid,tr[spc].ls);
Tr_build(mid+,r,tr[spc].rs);
return ;
}
int ask(int l,int r,int pos,int spc)
{
if(l==r)
return spc;
int mid=(l+r)/;
if(pos<=mid)
return ask(l,mid,pos,tr[spc].ls);
return ask(mid+,r,pos,tr[spc].rs);
}
int finf(int rt,int x)
{
int ff=ask(,n,x,rt);
if(tr[ff].fa==x)
return ff;
return finf(rt,tr[ff].fa);
}
void unin(int l,int r,int &spc,int last,int pos,int ff)
{
spc=++siz;
if(l==r)
{
tr[spc].fa=ff;
tr[spc].dp=tr[last].dp;
return ;
}
tr[spc].ls=tr[last].ls;
tr[spc].rs=tr[last].rs;
int mid=(l+r)/;
if(pos<=mid)
unin(l,mid,tr[spc].ls,tr[last].ls,pos,ff);
else
unin(mid+,r,tr[spc].rs,tr[last].rs,pos,ff);
return ;
}
void grow(int l,int r,int pos,int spc)
{
if(l==r)
{
tr[spc].dp++;
return ;
}
int mid=(l+r)/;
if(pos<=mid)
grow(l,mid,pos,tr[spc].ls);
else
grow(mid+,r,pos,tr[spc].rs);
return ;
}
int main()
{
scanf("%d%d",&n,&m);
Tr_build(,n,root[]);
for(int i=;i<=m;i++)
{
root[i]=root[i-];
int cmd;
scanf("%d",&cmd);
if(cmd==)
{
int x,y;
scanf("%d%d",&x,&y);
x=x^lastans;
y=y^lastans;
x=finf(root[i],x);
y=finf(root[i],y);
if(tr[x].fa==tr[y].fa)
continue;
if(tr[x].dp>tr[y].dp)
std::swap(x,y);
unin(,n,root[i],root[i-],tr[x].fa,tr[y].fa);
if(tr[x].dp==tr[y].dp)
grow(,n,tr[y].fa,root[i]);
}else if(cmd==)
{
int x;
scanf("%d",&x);
x=x^lastans;
root[i]=root[x];
}else{
int x,y;
scanf("%d%d",&x,&y);
x=x^lastans;
y=y^lastans;
x=finf(root[i],x);
y=finf(root[i],y);
if(tr[x].fa==tr[y].fa)
lastans=;
else
lastans=;
printf("%d\n",lastans);
}
}
return ;
}
BZOJ3674可持久化并查集(模板)的更多相关文章
- bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...
- bzoj3674 可持久化并查集
我是萌萌的任意门 可持久化并查集的模板题-- 做法好像很多,可以标号法,可以森林法. 本来有O(mloglogn)的神算法(按秩合并+倍增),然而我这种鶸渣就只会写O(mlog2n)的民科算法--再加 ...
- BZOJ3674: 可持久化并查集加强版
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3674 题解:主要是可持久化的思想.膜拜了一下hzwer的代码后懂了. 其实本质是可持久化fa数 ...
- 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- bzoj3673 bzoj3674可持久化并查集
并查集都写不来了qwq 之前写的是错的 sz的初值都是0,这样怎么加就都是0了,水这道题还是可以,但是加强版就过不了了 #include<cstdio> #include<cstri ...
- [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky
思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...
- BZOJ3674 可持久化并查集加强版 可持久化 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...
- 【可持久化数组】【rope】bzoj3673 bzoj3674 可持久化并查集 by zky
rope教程:http://blog.csdn.net/iamzky/article/details/38348653 Code(bzoj3673): #include<cstdio> # ...
- BZOJ 3674: 可持久化并查集模板
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <strin ...
随机推荐
- POJ 3225 Help with Intervals(线段树)
POJ 3225 Help with Intervals 题目链接 集合数字有的为1,没有为0,那么几种操作相应就是置为0或置为1或者翻转,这个随便推推就能够了,然后开闭区间的处理方式就是把区间扩大成 ...
- URAL 1823. Ideal Gas(数学啊 )
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1823 1823. Ideal Gas Time limit: 0.5 second Me ...
- Oracle数据库备份恢复,巡检须要关注的对象设置以及相关恢复概述
数据库备份恢复.巡检须要关注的对象设置: 1.数据库名称,以及DBID: --dbid在v$database中 SYS@ORCL>select dbid,name from v$dat ...
- Hadoop的单节点集群详细启动步骤
见,如下博客 hadoop-2.2.0.tar.gz的伪分布集群环境搭建(单节点) 很简单,不多赘述.
- 定时器函数SetTimer
原文链接:http://www.cnblogs.com/zhangpengshou/archive/2009/04/05/1429770.html 一.SetTimer表示的是定义个定时器.根据定义指 ...
- JAVA中jar包和war包的区别是
其实jar包和war包都可以看成压缩文件,用解压软件都可以打开,jar包和war包所存在的原因是,为了项目的部署和发布,通常把项目打包,通常在打包部署的时候,会在里面加上部署的相关信息. 这个打包实际 ...
- win7安装两个jdk,1.7和1.8,下载、安装、配置环境变量,方便切换
之前用过1.6,后来换电脑后用的1.7,由于时代在发展,许多插件.框架等新的功能需要jdk1.8才能使用,所以就想安装1.8,不过1.7还不准备卸载,就考虑安装多个jdk. 先下载jdk1.8,建议去 ...
- css line-height详解
行高指的是文本行的基线间的距离(更简单来说,行高是指文字尺寸与行距之间的和). 而基线(Base line),指的是一行字横排时下沿的基础线, 基线并不是汉字的下端沿,而是英文字母x的下端沿,同时还有 ...
- Zookeeper vs. etcd
etcd是go语言实现的. 对比,可以参考这篇文章: http://studygolang.com/articles/4837 <服务发现:Zookeeper vs etcd vs Consul ...
- swift菜鸟入门视频教程-12-21讲
前段时间录制的swift教程.一直懒就没有发出来,有些教程是在xcode beta2的时候录制的,所以可能如今不太适合了,可是还是会有点帮助,懒了不想写太多的东西了,基本上就是依照官方文档上面的章节做 ...