CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%%

  学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好处理一些。

  然后就用可持久化线段树来维护这个可持久化数组,就能做到可持久化并查集,可持久化平衡树,可持久化之类的云云

  3673不需要按秩合并,3674需要。。。用3674就能过俩,双倍经验双倍的幸福!

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
const int maxn=,inf=1e9;
struct poi{int lt,rt,fa,dep;}tree[maxn*];
int n,m,ty,x,y,z,tot,sz;
int root[maxn];
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
void build(int &x,int l,int r)
{
x=++sz;if(l==r){tree[x].fa=l;return;}
int mid=(l+r)>>;
build(tree[x].lt,l,mid);build(tree[x].rt,mid+,r);
}
void update(int &x,int l,int r,int cx,int delta)
{
tree[++sz]=tree[x];x=sz;
if(l==r){tree[x].fa=delta;return;}
int mid=(l+r)>>;
if(cx<=mid)update(tree[x].lt,l,mid,cx,delta);
else update(tree[x].rt,mid+,r,cx,delta);
}
void add(int &x,int l,int r,int cx)
{
tree[++sz]=tree[x];x=sz;
if(l==r){tree[x].dep++;return;}
int mid=(l+r)>>;
if(cx<=mid)add(tree[x].lt,l,mid,cx);
else add(tree[x].rt,mid+,r,cx);
}
int query(int x,int l,int r,int cx)
{
if(l==r)return x;
int mid=(l+r)>>;
if(cx<=mid)return query(tree[x].lt,l,mid,cx);
else return query(tree[x].rt,mid+,r,cx);
}
int gf(int k,int x){int xx=query(k,,n,x);return tree[xx].fa==x?xx:gf(k,tree[xx].fa);}
int main()
{
read(n);read(m);
build(root[],,n);
for(int i=;i<=m;i++)
{
read(ty);
root[i]=root[i-];
if(ty==)
{
read(x);read(y);x=gf(root[i],x);y=gf(root[i],y);
if(tree[x].fa==tree[y].fa)continue;
if(tree[x].dep>tree[y].dep)swap(x,y);
update(root[i],,n,tree[x].fa,tree[y].fa);
if(tree[x].dep==tree[y].dep)add(root[i],,n,tree[y].fa);
}
else if(ty==)read(x),root[i]=root[x];
else read(x),read(y),printf("%d\n",tree[gf(root[i],x)].fa==tree[gf(root[i],y)].fa);
}
return ;
}

bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)的更多相关文章

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

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

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

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

  3. bzoj 3674 可持久化并查集加强版——可持久化并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 用主席树维护 fa[ ]  和 siz[ ] .改 fa[ ] 和改 siz[ ] 都 ...

  4. BZOJ 3674 可持久化并查集加强版 可持久化并查集

    题目大意:同3673 强制在线 同3673 仅仅只是慢了一些0.0 这道题仅仅写路径压缩比仅仅写启示式合并要快一点点 两个都写就慢的要死0.0 改代码RE的可能是内存不够 #include<cs ...

  5. BZOJ3674 可持久化并查集加强版 可持久化 并查集

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...

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

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

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

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

  8. bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版

    bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...

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

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

随机推荐

  1. CSS随笔3

    1. CSS部分简洁使用 * background-radious:使得边框角“圆化”. * background:pink  url(“图片路径”)  no-repeat: * border 可以有 ...

  2. Qt-QPalette-调色板学习

    已经很久没有更新博客了,一是因为换了公司,完全是断网开发了,没有时间来写博客,最主要的就是温水煮青蛙,自己在舒适的环境中越来越懒了,最近打算强制自己更新一波.不知道能坚持多久.由于目前没有具体的Qt项 ...

  3. C do whlie 数数位

    #include <stdio.h> int main(int argc, char **argv) {    //定义两个变量 x 跟 n,n的初始化为0:  int x;  int n ...

  4. 372. Delete Node in a Linked List【LintCode java】

    Description Implement an algorithm to delete a node in the middle of a singly linked list, given onl ...

  5. JavaScript 正则

    元字符 预定义类 边界 ^在中括号中时,匹配非hello的 str = 'hello world' str.match(/[^hello]/g) //[" ", "w&q ...

  6. 详解Jedis连接池报错处理

    在使用Jedis连接池模式下,比较常见的报错如下: redis.clients.jedis.exceptions.JedisConnectionException:Could not get a re ...

  7. Python基础框架和工具

    最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进 ...

  8. Juice账号

    zhangxiaocong69 zxc6545398 15657167502 区块链账户: 0x00680404766965143796a0a070835c3cdf9a4a50

  9. mysql 导入 大sql文件

    任务:第一次用mysql,需要将一个1G左右的sql文件导入: 步骤:1:安装mysql-installer-community-5.7.20.0.msi 64位安装包 2:命令行登录:  mysql ...

  10. selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...