原题

加强版

题意:

可持久化并查集模板……

题解:

用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态。

不能用路径压缩,但是要按置合并,使复杂度保证在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 可持久化并查集 || 可持久化数组的更多相关文章

  1. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  2. 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树

    [BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...

  3. BZOJ.3673/3674.可持久化并查集(可持久化线段树 按秩合并/启发式合并)

    BZOJ 3673 BZOJ 3674(加强版) 如果每次操作最多只修改一个点的fa[],那么我们可以借助可持久化线段树来O(logn)做到.如果不考虑找fa[]的过程,时空复杂度都是O(logn). ...

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

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

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

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

  6. 【BZOJ】【3673】可持久化并查集 & 【3674】可持久化并查集加强版

    可持久化并查集 Orz hzwer & zyf 呃学习了一下可持久化并查集的姿势……其实并查集就是一个fa数组(可能还要带一个size或rank数组),那么我们对并查集可持久化其实就是实现一个 ...

  7. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

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

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

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

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

随机推荐

  1. 怎样安装JMeter

    JMeter有图形界面, 而且支持中文! JMeter官网地址: http://jmeter.apache.org/ 点击左上角的下载: 点击下面的.zip后缀的压缩包: 解压到本地: JMeter目 ...

  2. Appium最新的服务器初始化参数(Capability)【截止11月29日,后续最新的可以看github】

    键 描述 值 automationName 自动化测试的引擎 Appium (默认)或者 Selendroid platformName 使用的手机操作系统 iOS, Android, 或者 Fire ...

  3. Shader-水流效果

    效果图:(贴图类似于泥石流) 代码: Shader "CookbookShaders/Chapter02/ScrollingUVs" { Properties { _MainTin ...

  4. (C#)原型模式—深复制与浅复制

    1.原型模式 用原型实例指定创建对象的实例,并且通过拷贝这些原型创建新的对象. *原型模式隐藏了创建对象的细节,提高了性能. *浅复制:被复制对象的所有变量都含有与原来对象相同的值,而且所有对其他对象 ...

  5. 【带 josn参数的测法】

    遇到json 参数的情况这样写  ,否则就会报错 cod 415   nocookie post请求 ,","email":"beihe@163.com&quo ...

  6. 【Python 开发】第二篇 :Python安装

    一.python3.x安装 1)由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. 官网:https://www.python.o ...

  7. vim—自动缩进(编写Python脚本)

    大神推荐使用vim编写Python脚本,学而时积之,不亦乐乎! 使用vim编写Python脚本的时候不能正常缩进,需要修改vimrc文件 Ubuntu系统下vimrc文件的位置: $ cd /etc/ ...

  8. 【转载】2015Android 面试题 01

    1.如何避免ANR? 答:ANR:Application Not Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应. 当出现下列情况时,Andr ...

  9. jquery取radio单选按钮

    // var strMess = '<%=Exchange() %>';//            if (strMess == "兑换成功") {//         ...

  10. NFC学习总结

    NFC 学习总结 1.NFC 的基本概念 NFC 是 Near FieldCommunication 的缩写,即距离无线通信技术.由飞利浦公司和索尼公司共同开发的NFC 是一种非接触式识别和互联技术, ...