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. Java开发工程师(Web方向) - 04.Spring框架 - 期末测试

    Spring框架客观题 Spring框架编程题 http://blog.csdn.net/sinoacc/article/details/51702458 1 (25分) 假设有如下数据表: crea ...

  2. JS里点击事件判断是否 触发了节点 和给标签添加class属性

    $("#activityType").click(function(e){ if(e.target==$("#bb")[0]){ var bb=document ...

  3. Aizu - 2249

    注意先保证距离最短,再来判断价格 邻接矩阵回朝内存  ,要用邻接表的 #include<bits/stdc++.h> using namespace std; #define inf 0x ...

  4. [Clr via C#读书笔记]Cp3共享程序集和强命名程

    Cp3共享程序集和强命名程序集 私有方式部署+全局方式部署:弱命名程序集+强命名程序集 强命名程序集使用发布者的公钥私钥进行签名,唯一标识发布者. 共享dll被全部复制到System32中 强命名程序 ...

  5. Struts2文件上传带进度条,虽然不是很完美

    好久没有写东西,最近在做个项目,要用到文件h 传的,以前虽然也做上传,但是总觉得不好用 ,现在和队友合作做了一个带进度条的上传,觉得还行~~和大家分享一下. 首先说一下大概是这样实现的,在我们平时的上 ...

  6. [leetcode-744-Find Smallest Letter Greater Than Target]

    Given a list of sorted characters letters containing only lowercase letters, and given a target lett ...

  7. es6从零学习(三):Class的基本用法

    es6从零学习(三):Class的基本用法 一:定义一个类 //定义类 class Point { constructor(x, y) { this.x = x; this.y = y; } toSt ...

  8. bootstrapValidator.js,最好用的bootstrap表单验证插件 简单实用方法

    实用方法 1.引入 在有jquery和bootstrap的页面里引入bootstrapValidator.js和bootstrapValidator.css文件 2. 按照bootstrap的表单组件 ...

  9. 模拟Excel同一列相同值的单元格合并

    背景 项目中有一个查询工作量,可以将查询的结果导出到Excel表中.在Excel工具中,有一个合并居中功能,可以将选中的单元格合并成一个大的单元格.现在需要在程序中直接实现查询结果的汇总, 问题分析 ...

  10. DNS域名解析协议

    一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...