[bzoj3673] 可持久化并查集 by zky
总感觉到现在才来写这题有点奇怪。
并查集如果按秩合并的话,每次合并只会修改一个点的父亲。
用可持久化线段树来实现可持久化数组就行了。。
然而我写的是按子树大小合并。。结果比按秩合并慢了一点>_<
中途因为没看清楚 “回到第k次操作之后的状态” WA了好几发= =
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=;
const int mxnode=maxn*;
int lc[mxnode],rc[mxnode],sz[mxnode],num[mxnode],fa[mxnode],rt[maxn];
int i,j,k,n,m,tot,x,y; int ra;char rx;
inline int read(){
rx=getchar(),ra=;
while(rx<''||rx>'')rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra;
}
inline int getpos(int x){
int p,a,b,mid;
p=rt[i-],a=,b=n;
while(a<b){
mid=(a+b)>>;
if(x<=mid)p=lc[p],b=mid;
else p=rc[p],a=mid+;
}
return p;
}
inline void upd(int pre,int &x,int a,int b,int pos,int v){
x=++tot;
if(a==b){num[x]=pos,fa[x]=v,sz[x]=sz[pre];return;}
int mid=(a+b)>>;
if(pos<=mid)rc[x]=rc[pre],upd(lc[pre],lc[x],a,mid,pos,v);
else lc[x]=lc[pre],upd(rc[pre],rc[x],mid+,b,pos,v);
}
inline void uni(int x,int y){
for(x=getpos(x);num[x]!=fa[x];x=getpos(fa[x]));
for(y=getpos(y);num[y]!=fa[y];y=getpos(fa[y]));
if(x==y){rt[i]=rt[i-];return;}
if(sz[x]<sz[y])
upd(rt[i-],rt[i],,n,num[x],num[y]),sz[y]+=sz[x];
else upd(rt[i-],rt[i],,n,num[y],num[x]),sz[x]+=sz[y];
}
void build(int &x,int a,int b){
x=++tot;
if(a==b){sz[x]=,num[x]=fa[x]=a;return;}
build(lc[x],a,(a+b)>>),build(rc[x],((a+b)>>)+,b);
} int main(){
n=read(),m=read();
build(rt[],,n);int id;
for(i=;i<=m;i++){
id=read();//printf("now: %d\n",now);
if(id==)rt[i]=rt[read()];
if(id==)x=read(),y=read(),uni(x,y);
if(id==){
x=read(),y=read();
for(x=getpos(x);num[x]!=fa[x];x=getpos(fa[x]));
for(y=getpos(y);num[y]!=fa[y];y=getpos(fa[y]));
printf("%d\n",x==y);
rt[i]=rt[i-];
}
}
return ;
}
[bzoj3673] 可持久化并查集 by zky的更多相关文章
- BZOJ3673 可持久化并查集 by zky 【主席树】
BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...
- bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky
思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...
- BZOJ3673 可持久化并查集 by zky 可持久化 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3673 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...
- bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版
主席树可持久化数组,还挺好YY的 然而加强版要路径压缩.. 发现压了都RE 结果看了看数据,默默的把让fx的父亲变成fy反过来让fy的父亲变成fx 搞笑啊 #include<cstdio> ...
- 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...
- 3673: 可持久化并查集 by zky
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2170 Solved: 978[Submit][Status ...
- Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...
随机推荐
- iOS 视频开发学习
原文:浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我 ...
- java.util.ConcurrentHashMap (JDK 1.8)
1.1 java.util.ConcurrentHashMap继承结构 ConcurrentHashMap和HashMap的实现有很大的相似性,建议先看HashMap源码,再来理解Concurrent ...
- jsp上的九个隐含对象
首先说一说件jsp的原理.jsp被认为最经典的解释是 “嵌入了java 代码的html”. 在网上查了一些资料,和我本身对jsp的认识,总结如下: jsp本质上是一个servlet,继承自 当第一次 ...
- StringUtils工具类常用方法
前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅. isEmpty(String str) 是否为空,空格字符为false is ...
- Find the Maximum sum
Given an array of n elements.Find the maximum sum when the array elements will be arranged in such w ...
- python 动态加载类对象
第一步 加载模块 module =__import__("modulename",fromlist=['']) 第二部 加载类对象 cls = getattr(module, & ...
- 9.11 test
题面.pdf T1:通过打表发现,从一个点出发只有距离为1,2,3,5,6,9,10,13,17的点才不能到达: 那么我们转移的时候只有距离在20以内才不一定能直接转移,那么我们离散化之后; 对于每一 ...
- 转载|chrome developer tool—— 断点调试篇
断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...
- jquery $.fn $.fx是什么意思有什么用
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效, .fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn ...
- Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启
本文地址http://comexchan.cnblogs.com/ ,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 完成了Nginx的编译安装后,仅仅是能支持Nginx最基本的功能, ...