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=200010,inf=1e9;
struct poi{int lt,rt,fa,dep;}tree[maxn*40];
int n,m,ty,x,y,z,tot,sz;
int root[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',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)>>1;build(tree[x].lt,l,mid);build(tree[x].rt,mid+1,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)>>1;if(cx<=mid)update(tree[x].lt,l,mid,cx,delta);else update(tree[x].rt,mid+1,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)>>1;if(cx<=mid)add(tree[x].lt,l,mid,cx);else add(tree[x].rt,mid+1,r,cx);
}
int query(int x,int l,int r,int cx)
{if(l==r)return x;int mid=(l+r)>>1;if(cx<=mid)return query(tree[x].lt,l,mid,cx);else return query(tree[x].rt,mid+1,r,cx);
}
int gf(int k,int x){int xx=query(k,1,n,x);return tree[xx].fa==x?xx:gf(k,tree[xx].fa);}
int main()
{read(n);read(m);build(root[0],1,n);for(int i=1;i<=m;i++){read(ty);root[i]=root[i-1];if(ty==1){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],1,n,tree[x].fa,tree[y].fa);if(tree[x].dep==tree[y].dep)add(root[i],1,n,tree[y].fa);}else if(ty==2)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 0;
}

View Code

转载于:https://www.cnblogs.com/Sakits/p/7418281.html

bzoj 36733674 可持久化并查集加强版(可持久化线段树+启发式合并)相关推荐

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

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

  2. bzoj 2733: [HNOI2012]永无乡(线段树启发式合并)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3850  Solved: 2061 [Submit][Sta ...

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

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

  4. BZOJ 3673: 可持久化并查集 by zky

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

  5. BZOJ 3674 可持久化并查集

    https://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化数组维护并查集的fa数组, 查询时间复杂度为nlognlogn,一个log是并查集 ...

  6. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  7. BZOJ5415:[NOI2018]归程(可持久化并查集,最短路)

    Description Input Output Sample Input1 1 4 3 1 2 50 1 2 3 100 2 3 4 50 1 5 0 2 3 0 2 1 4 1 3 1 3 2 S ...

  8. 洛谷P4768 [NOI2018]归程 [可持久化并查集,Dijkstra]

    题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时 ...

  9. 可持久化4--可持久化并查集

    可持久化并查集 可持久化并查集 = 按秩合并并查集 + 可持久化数组 首先并查集不能采用路径压缩,这是因为一次findR操作中,fa数组的很多位置(u->ru)会发生修改,由于每次修改都需要在可 ...

最新文章

  1. lasTools laszip.exe 点云las/laz的无损压缩/解压缩工具
  2. linux系统服务介绍
  3. mysql增删改查的命令_MySql增删改查命令
  4. 如何实现标准TCODE的屏幕增强
  5. Swift 结构体和类的最大区别
  6. 心理学上的被动_心理学:骨子里就被动的人,一定会有这5种表现
  7. (python3.8)pygraphviz的下载安装配置(在python下)最新
  8. 踩准时钟节拍、玩转时间转换,鸿蒙轻内核时间管理有妙招
  9. [No000011A]Office Excel设置显示日期与星期
  10. mysql句式增删改,MySQL 增删改语句
  11. flash mx拖拽实例_Flash MX 2004 Professional的百叶窗过渡效果
  12. 新疆计算机二级vb 试题,2014新疆维吾尔自治区全国计算机等级考试二级VB试题及答案...
  13. 联想锁屏壁纸缓存文件夹目录
  14. PAT(甲级)1148 Werewolf - Simple Version(枚举)
  15. Android中MVP模式
  16. 修改tomcat 发布war大小限制
  17. 以莺尾花数据集为例,探讨R模型部署之道
  18. MySQL Utilities
  19. HTML5网页设计基础——精美电商悬浮窗
  20. 什么是事件驱动架构(EDA)? 一个会写诗的程序员

热门文章

  1. 安装SQL2012出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1
  2. vue --- vue-router
  3. Laravel框架中的路由和控制器
  4. Hive安装中遇到过的坑
  5. Android-Universal-Image-Loader 的使用说明
  6. JQuery链式操作简单的菜单列表
  7. 删除文件夹里的图片,打印删除日志
  8. Hadoop2.6集群动态添加和删除数据节点
  9. 版本管理工具:git svn 的比较
  10. H264 TS/ES