BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树
既然有了可持久化数组,就有可持久化并查集。。
由于上课讲过说是只能按秩合并(但是我也不确定。。。),所以就先写了按秩合并,相当于是维护fa[]和rk[]
getf就是在这棵树中找,直到找到一个点的fa[x]==x
之所以这种写法不能路径压缩,个人理解是因为路径压缩会破坏原先的结构。。。反正我魔改改错了。。。先咕着路径压缩qwq
下面是加强版的代码。。。只有按秩合并
#include<cstdio>
#include<iostream>
#define R register int
#define pc(x) putchar(x)
using namespace std;
const int N=2E5+,M=1E7+;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,tot,lst,crt;
int rt[N],ls[M],rs[M],vl[M],rk[M];
inline void build(int& tr,int l,int r) { tr=++tot;
if(l==r) {vl[tr]=l,rk[tr]=; return; } R md=l+r>>;
build(ls[tr],l,md),build(rs[tr],md+,r);
}
inline void ins(int& tr,int lst,int l,int r,int pos,int v) {
tr=++tot,ls[tr]=ls[lst],rs[tr]=rs[lst],vl[tr]=vl[lst],rk[tr]=rk[lst];
if(l==r) {vl[tr]=v; return ;} R md=l+r>>;
pos<=md?ins(ls[tr],ls[lst],l,md,pos,v):ins(rs[tr],rs[lst],md+,r,pos,v);
}
inline int getf(int tr,int l,int r,int pos) {
if(l==r) {return pos==vl[tr]?tr:getf(rt[crt],,n,vl[tr]);} R md=l+r>>;
return (pos<=md)?getf(ls[tr],l,md,pos):getf(rs[tr],md+,r,pos);
}
inline void add(int& tr,int lst,int l,int r,int pos) {
tr=++tot; ls[tr]=ls[lst],rs[tr]=rs[lst],vl[tr]=vl[lst],rk[tr]=rk[lst];
if(l==r) {++rk[tr]; return ;} R md=l+r>>;
pos<=md?add(ls[tr],ls[lst],l,md,pos):add(rs[tr],rs[lst],md+,r,pos);
}
signed main() {
n=g(),m=g(); build(rt[],,n);
for(R i=;i<=m;++i) {
R k=g(),a=g()^lst,b; if(k==) { rt[i]=rt[i-],crt=i;
b=g()^lst; a=getf(rt[i],,n,a); b=getf(rt[i],,n,b);
if(vl[a]!=vl[b]) {
if(rk[a]<rk[b]) swap(a,b);
ins(rt[i],rt[i-],,n,vl[b],vl[a]);
if(rk[a]==rk[b]) add(rt[i],rt[i],,n,vl[a]);
}
} else if(k==) rt[i]=rt[a];
else { rt[i]=rt[i-],crt=i; b=g()^lst;
a=getf(rt[i],,n,a),b=getf(rt[i],,n,b);
vl[a]==vl[b]?(lst=,pc(''),pc('\n')):(lst=,pc(''),pc('\n')); //cout<<"fasdhfjlkasdf"<<endl;
}
} //while(1);
}
2019.05.06
BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树的更多相关文章
- bzoj 2733 : [HNOI2012]永无乡 (线段树合并)
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)
http://www.lydsy.com/JudgeOnline/problem.php?id=3673 题意: 思路: 可持久化数组可以用可持久化线段树来实现,并查集的查询操作和原来的一般并查集操作 ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
- Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...
- bzoj 3673&3674: 可持久化并查集 by zky
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- BZOJ.3673/3674.可持久化并查集(可持久化线段树 按秩合并/启发式合并)
BZOJ 3673 BZOJ 3674(加强版) 如果每次操作最多只修改一个点的fa[],那么我们可以借助可持久化线段树来O(logn)做到.如果不考虑找fa[]的过程,时空复杂度都是O(logn). ...
- [bzoj] 3673 3674 可持久化并查集 || 可持久化数组
原题 加强版 题意: 可持久化并查集模板-- 题解: 用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态. 不能用路径压缩,但是要按置合并,使复杂度保证在O(log) #include&l ...
- bzoj 3673 可持久化并查集
本质上是维护两个可持久化数组,用可持久化线段树维护. /************************************************************** Problem: ...
随机推荐
- [HDU4652]Dice
vjudge 题意 \(m\)面骰子,求 1.连续出现\(n\)个相同的停止: 2.连续出现\(n\)个不同的停止 的期望投骰子次数. \(n,m ≤ 10^6\) sol 首先考虑一个转移式子吧. ...
- bzoj 2300: [HAOI2011]防线修建 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题解 这道题让我们维护一个支持动态删除点的上凸壳 并且告诉了我们三个一定不会被删除 ...
- 浏览器全屏的JS代码实现
方法一:该方法是从一个网上的效果看到不错,然后自己就拿来下来实验了一下,还是比较满意度,下面直接给出代码 <!DOCTYPE HTML> <html lang="en-US ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- Centos6.5上的iptables
1.Centos6.5默认开启了iptables 当Centos6.5上安装了MySQL后,在远程连接它,如果出现10060的错误,说明iptables在起作用. 关闭iptables即可,sudo ...
- UIButton常见用法
//UIButton是iOS中用来响应用户点击的控件,既可以显示文字,也可以显示图片,也可以处理用户交互 //UIButton的创建,一般采用类方法来创建,不需要释放 //UIButton 也是UIC ...
- nginx与apache 限制ip连接数和带宽方法
今天有个人问我,nginx怎么限制ip连接数,突然想不起来了,年龄大了,脑子不怎么好使了.还要看一下配置才想起了.那个人又问我,你测试过的吗?一下子把我问蒙了,我真没测试过了,也不知道启作用了没有. ...
- 使用ceph命令提示handle_connect_reply connect got BADAUTHORIZER
输入命令提示如下错误: [root@node1 ~]# rados -p testpool ls 2017-10-21 06:13:25.743045 7f8f89b6d700 0 -- 192.16 ...
- 1 slow requests are blocked > 32 sec解决方法
[root@node1 ~]# ceph -s cluster: id: b8b4aa68-d825-43e9-a60a-781c92fec20e health: HEALTH_WARN Reduce ...
- 【P2P网贷新手入门】详解借款标的种类及其风险
不同于国外的网贷平台以信用借款标为主,在中国,我们投资网贷平台会看到多样借款标,而投资人往往弄不清自己投资的标属于什么类型的标,特点怎么样,风险如何. 抵 押 标 定义:借款人用自己的房屋车辆等实物在 ...