[bzoj] 3673 3674 可持久化并查集 || 可持久化数组
原题
加强版
题意:
可持久化并查集模板……
题解:
用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态。
不能用路径压缩,但是要按置合并,使复杂度保证在O(log)
#include<cstdio>
#include<algorithm>
#define N 200010
#define M 5000010
using namespace std;
int n,m,f[N],root[N],cnt,sze[M];
struct hhh
{
int ls,rs,sum;
}tre[M];
int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
void change(int &now,int old,int l,int r,int x,int y)
{
now=++cnt;
tre[now].rs=tre[old].rs;
tre[now].ls=tre[old].ls;
if (l==r) return (void)(tre[now].sum=y);
int mid=(l+r)>>1;
if (x>mid) change(tre[now].rs,tre[old].rs,mid+1,r,x,y);
else change(tre[now].ls,tre[old].ls,l,mid,x,y);
}
void add(int &i,int old,int l,int r,int pos)
{
i=++cnt;
tre[i].ls=tre[old].ls;
tre[i].rs=tre[old].rs;
if (l==r) return (void)(sze[i]=sze[old]+1);
int mid=(l+r)>>1;
if (pos<=mid) add(tre[i].ls,tre[old].ls,l,mid,pos);
else add(tre[i].rs,tre[old].rs,mid+1,r,pos);
}
int query(int i,int l,int r,int x)
{
if (!i) return x;
if (l==r) return tre[i].sum?tre[i].sum:x;
int mid=(l+r)>>1;
if (x>mid) return query(tre[i].rs,mid+1,r,x);
return query(tre[i].ls,l,mid,x);
}
int find(int now,int x)
{
int fa;
while (1)
{
fa=query(root[now],1,n,x);
if (x==fa) return x;
x=fa;
}
}
int main()
{
n=read();m=read();
int a,b,op,x,y;
for (int i=1;i<=m;i++)
{
op=read();a=read();
if (op==1)
{
root[i]=root[i-1];
b=read();
x=find(i,a);y=find(i,b);
if (x==y) continue;
if (sze[x]>sze[y]) change(root[i],root[i],1,n,y,x);
else change(root[i],root[i],1,n,x,y);
if (sze[x]==sze[y]) add(root[i],root[i],1,n,y);
}
else if (op==2) root[i]=root[a];
else root[i]=root[i-1],b=read(),(find(i,a)==find(i,b))?puts("1"):puts("0");
}
return 0;
}
[bzoj] 3673 3674 可持久化并查集 || 可持久化数组的更多相关文章
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树
[BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...
- BZOJ.3673/3674.可持久化并查集(可持久化线段树 按秩合并/启发式合并)
BZOJ 3673 BZOJ 3674(加强版) 如果每次操作最多只修改一个点的fa[],那么我们可以借助可持久化线段树来O(logn)做到.如果不考虑找fa[]的过程,时空复杂度都是O(logn). ...
- 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】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
随机推荐
- 抽样分布(2) t分布
定义 t分布 设X ~ N(0,1),Y ~ χ2(n),且X,Y相互独立,则称随机变量 服从自由度为n的t分布(学生氏分布) 记为 t~t(n),其概率密度为 由于tn(x)是偶函数,其图形关于y轴 ...
- yarn 原理
产生背景 直接源于MRv1在几个方面的缺陷 扩展性受限(NameNode,JobTracker设计为单一节点,内存容量有限) 单点故障 难以支持MR之外的计算 slot数目无法动态修改,Map slo ...
- iOS性能调优工具
总结: 三类工具 基础工具 (NSLog的方式记录运行时间.) 性能工具.检测各个部分的性能表现,找出性能瓶颈 内存工具.检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电 ...
- zipaligin的使用介绍
近来一直在做APK反编译和重编译的工作,针对一些apk需要放入一些相应的文件,(当然这里不涉及非法盈利,都是有合约的),在对一些包打包以后,发现可以通过一个叫做zipalign的工具进行优化,对于这个 ...
- hdu1312Red and Black(迷宫dfs,一遍)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 在Android上运用Anko和Kotlin开发数据库:SQLite从来不是一件轻松的事(KAD25)
作者:Antonio Leiva 时间:Mar 30, 2017 原文链接:https://antonioleiva.com/databases-anko-kotlin/ 事实告诉我们:在Androi ...
- yarn logs -applicationId命令java版本简单实现
import java.io.DataInputStream; import java.io.EOFException; import java.io.FileNotFoundException; i ...
- 在github上面创建属于自己的个性主页
圈子里面越来越多的同事在github上面创建自己的项目文档,那里确实高手云集,海内外的技术大牛小牛们都在那儿有一席之地,为“helloword”贡献自己. 以上感慨略过... 这几日正想创建一个自己的 ...
- Tensorflow学习第1课——从本地加载MNIST以及FashionMNIST数据
很多Tensorflow第一课的教程都是使用MNIST或者FashionMNIST数据集作为示例数据集,但是其给的例程基本都是从网络上用load_data函数直接加载,该函数封装程度比较高,如果网络出 ...
- 第三课——MFC编程
一.MFC概述 1. MFC简述 MFC不仅仅是一套基础类库,更是一种编程方式. 2. MFC由来 1987年微软公司推出了第一代Windows产品,并为应用程序设计者提供了Win16(16位Wind ...