题目大意:让你实现一个可持久化的并查集(3674强制在线)。

解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了。

正解应该是主席树||可持久化平衡树,然而rope就是可持久化平衡树呵!

只需将rope当做数组般使用,并查集即可。

BZOJ3673 C++ Code:

#include<cstdio>
#include<ext/rope>
typedef __gnu_cxx::rope<int> rp;
rp *f[20005];
int n,m,i;
int a[20005];
int dad(int x){
int p;
if((p=f[i]->at(x))==x)return x;
f[i]->replace(x,dad(p));
return f[i]->at(x);
}
int main(){
scanf("%d%d",&n,&m);
for(i=0;i<=n;++i)a[i]=i;
f[0]=new rp(a,a+n+1);
for(i=1;i<=m;++i){
f[i]=new rp(*f[i-1]);
int op;
scanf("%d",&op);
if(op==1){
int u,v;
scanf("%d%d",&u,&v);
u=dad(u),v=dad(v);
if(u!=v)f[i]->replace(v,u);
}else
if(op==2){
int t;
scanf("%d",&t);
f[i]=new rp(*f[t]);
}else{
int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",dad(u)==dad(v)?1:0);
}
}
return 0;
}

而对于3674,唯一的问题就是路径压缩时,如果结果与当前值相等,就不需要更改值了,否则会炸内存MLE!

BZOJ3674 C++ Code:

#include<cstdio>
#include<ext/rope>
typedef __gnu_cxx::rope<int> rp;
rp *f[200005];
int n,m,i,lst;
int a[200005];
int dad(int x){
int p;
if((p=f[i]->at(x))==x)return x;
p=dad(p);
if(f[i]->at(x)==p)return p;
f[i]->replace(x,p);
return f[i]->at(x);
}
int main(){
scanf("%d%d",&n,&m);
for(i=0;i<=n;++i)a[i]=i;
f[0]=new rp(a,a+n+1);
for(i=1;i<=m;++i){
f[i]=new rp(*f[i-1]);
int op;
scanf("%d",&op);
if(op==1){
int u,v;
scanf("%d%d",&u,&v);
u=dad(u^lst),v=dad(v^lst);
if(u!=v)f[i]->replace(v,u);
}else
if(op==2){
int t;
scanf("%d",&t);
f[i]=new rp(*f[t^lst]);
}else{
int u,v;
scanf("%d%d",&u,&v);
u^=lst;v^=lst;
printf("%d\n",lst=dad(u)==dad(v)?1:0);
}
}
return 0;
}

[BZOJ3673&3674]可持久化并查集&加强版的更多相关文章

  1. [bzoj3673/3674可持久化并查集加强版]

    n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2 ...

  2. BZOJ 3674 可持久化并查集加强版(路径压缩版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  3. BZOJ 3674 可持久化并查集加强版(按秩合并版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  4. 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  5. bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)

    CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...

  6. BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树

    既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...

  7. BZOJ 3674 可持久化并查集加强版(主席树变形)

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2515  Solved: 1107 [Submit][Sta ...

  8. bzoj 3674: 可持久化并查集加强版 (启发式合并+主席树)

    Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了!ndsf:暴力就可以轻松虐!zky:…… ...

  9. BZOJ3673/3674:可持久化并查集

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

随机推荐

  1. dp入门(先摆在这里,之后细细读)

    网址转载链接:  http://bbs.chinaunix.net/thread-4094539-1-1.html 动态规划:从新手到专家 Hawstein翻译 前言 我们遇到的问题中,有很大一部分可 ...

  2. getattibute 与 getparameter区别

    1.getAttribute是取得jsp中 用setAttribute设定的attribute 2.parameter得到的是string:attribute得到的是object  3.request ...

  3. [实验楼]python11期--NO.1(未完成)

    tuple 是 Python 的一种不可变数据类型,用于列表数据一旦初始化就不会再修改的场景.tuple 只能通过位置索引去访问里面的元素,但有时候我们需要给每个元素取个别名,以便通过别名去获取对应的 ...

  4. Pyhton学习——Day50

    #HTTP协议# 又是转载:http://www.cnblogs.com/yuanchenqi/articles/6000358.html# 一 HTTP概述# HTTP(hypertext tran ...

  5. 前端和后台对接时对sign加密方法

    前端和后台对接时对sign加密方法 /*后台php对接进行sign标签加密 1 获取向后台请求的数据data(key/value方式),可以是个对象(obj),也可以是数组(arr); 2 将数据的k ...

  6. jquery-jquery异步提交表单插件

    使用jquery.form可以异步提交文件或者表单,下面的代码演示了如何提交文件 http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js <s ...

  7. WinServer-IIS初始安装及发布网站

    \aspnet_regiis.exe –i 还有非常重要的一步就是给发布文件夹设置权限,到底设置那一个用户的权限我也没有弄清楚,大概是IIS_IUSERS或者IUSR用户就可以了,我设置完了之后没有反 ...

  8. JavaCodeTra 36选7 彩票抽奖

    想写个小代码试试自己的运气.然并卵.并不能猜中 import java.util.Random; import java.util.Scanner; /** * */ /** * @author Ha ...

  9. HDU 4828

    其实..这题是<组合数学>的习题中的一道......当初不会..... 想到一个证明: 填入2n个数,把填在上方的数的位置填上+1,下方的填上-1.这样,在序列1....2n的位置,任意前 ...

  10. 外网主机如何将数据包发送到共用一个公网IP的局域网某特定主机上的

    内网的一台电脑要上因特网对外开放服务或接收数据.都须要port映射.port映射分为动态和静态. 动态port映射:内网中的一台电脑要訪问站点.会向NAT网关发送数据包.包头中包含对方站点IP.por ...