原题

加强版

题意:

可持久化并查集模板……

题解:

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

不能用路径压缩,但是要按置合并,使复杂度保证在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. 聊聊WS-Federation(test)

    本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...

  2. JavaWeb(二)——Tomcat服务器(一)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  3. C语言灵魂--指针

    什么是指针?理解指针之前得知道什么是地址. 1.数据在计算机中的存储形式: 数据在计算机中是以二进制的形式存储的.计算机的存储器是用半导体集成电路构成的,有N多个二极管元件组成. 每一个二极管元件就如 ...

  4. hdu5305 Friends(dfs,多校题)

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. MySQL☞sign函数

    sign( )函数:判断数值的正负性,如果数值是正数,返回值是1,如果该数值是负数,返回值是-1,如果该数值是 0,返回值也是0. 格式: select sign(数值) from 表名 例子: 1. ...

  6. [Clr via C#读书笔记]Cp5基元类型引用类型值类型

    Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...

  7. C二维数组行为空,列不为空

    二维数组: 处理二维数组得函数有一处可能不太容易理解:数组的行可以在函数调用时传递,但是数组的列却只能被预置在函数内部. eg: #define COLS 4 int sum(int ar[][COL ...

  8. Python3 数据类型-字典

    字典是一种可变数据类型,且可存储任意类型对象. 字典使用大括号"{}"括起来,由键(key)和值(values)组成,键只能使用不可变类型定义,值可以使用可变类型{'键':'值'} ...

  9. js经典试题之闭包

    js经典试题之闭包 1:以下代码输出的结果是? function Foo(){ var i=0; return function(){ document.write(i++); } } var f1= ...

  10. js随机数算法

    function rnd( seed ){ seed = ( seed * 9301 + 49297 ) % 233280; //为何使用这三个数? return seed / ( 233280.0 ...