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

0<n,m<=2*10^5  强制在线。

这两题一题都一样,另一题比较水,nm只有2*10^4,允许离线.....

做法很简单,把数组当作可持久化线段树那么维护,每个表示区间的节点都不存东西,每次只要新建log个节点。

我交水的那道过不去,绝望的时候我交了一发加强版居然A了,根据我多年的经验一定是有特殊数据的坑,特判了一波终于过了。

用了启发式合并之后复杂度nlog^2n

#include<iostream>
#include<cstdio>
#define MN 20000000
#define MM 200000
using namespace std;
inline int read()
{int x = 0 , f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1;  ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}int cnt=0,n,m,last=0,rt[MM+5],cc;
struct data{int x,size;
}s[MM*3+5];
struct TREE{int l,r;data *x;
}T[MN];void build(int x,int l,int r)
{if(l==r){T[x].x=&s[l];return;}int mid=l+r>>1;build(T[x].l=(++cnt),l,mid);build(T[x].r=(++cnt),mid+1,r);
}data*get(int x,int k,int l=1,int r=n)
{ if(l==r)return T[x].x;int mid=l+r>>1;if(k<=mid) return get(T[x].l,k,l,mid);else return get(T[x].r,k,mid+1,r);
}data getfa(int x,int r)
{data y=*get(r,x),ans=y;if(!y.x)return (data){x,ans.size};while(y.x) {ans=y;y=*get(r,y.x);}return (data){ans.x,y.size};
}void ins(int x,int dep,int k)
{int l=1,r=n;int nx=rt[dep]=++cnt;while(l<r){int mid=l+r>>1;if(k<=mid){T[nx].r=T[x].r;T[nx].l=++cnt;nx=T[nx].l;x=T[x].l;r=mid;}else{T[nx].l=T[x].l;T[nx].r=++cnt;nx=T[nx].r;x=T[x].r;l=mid+1;}}T[nx].x=&s[cc];
}int main()
{cc=n=read();m=read();for(int i=1;i<=n;i++)s[i]=(data){0,1};build(++cnt,1,n);rt[0]=1;for(int i=1;i<=m;i++){int a=read(),b=read()^last;if(a==2)rt[i]=rt[b];else{int c=read()^last;if(a==3) printf("%d\n",last=(getfa(b,rt[i-1]).x==getfa(c,rt[i-1]).x)),rt[i]=rt[i-1];else{data x=getfa(b,rt[i-1]),y=getfa(c,rt[i-1]);if(x.x==y.x){rt[i]=rt[i-1];continue;}if(x.size>y.size)swap(x,y);s[++cc]=(data){y.x,x.size};ins(rt[i-1],i,x.x);s[++cc]=(data){0,x.size+y.size};ins(rt[i],i,y.x);}}}return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj3674.html

[bzoj3673/3674可持久化并查集加强版]相关推荐

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

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

  2. bzoj 36733674 可持久化并查集加强版(可持久化线段树+启发式合并)

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

  3. BZOJ 3674 可持久化并查集

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

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

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

  5. 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 ...

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

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

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

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

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

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

  9. 可持久化线段树【主席树】可持久化并查集【主席树+并查集】

    笼统的主席树原理 众所周知, 主席树是可以持久化的, 换言之你能知道你所维护信息的所有历史状态. 主席树是这样做的: 1. 首先建一颗朴素的线段树,代表初始状态 (下图黑色) , 也就是第0次操作后的 ...

最新文章

  1. [YTU]_2922(Shape系列-8)
  2. Linux疑难杂症解决方案100篇(二)-SHELL编程函数的定义及调用
  3. Activity之间使用intent传递大量数据带来问题总结
  4. 如何实现Spark on Kubernetes?
  5. 成员缩写_「gnps,nbcs」是什么意思?00后饭圈缩写你看懂多少
  6. 菜鸟学习Spring——60s配置XML方法实现简单AOP
  7. Arcgis Javascript那些事儿(一)--Arcgis server发布feature access服务
  8. BBS论坛(二十三)
  9. nginx平滑升级至最新版的nginx-1.9.5
  10. java8 Stream接口简单使用
  11. 在Vue中使用Aliplayer,做视频播放或者视频监控
  12. 嵩天python笔记_嵩天Python学习笔记-01
  13. JavaScript 动态生成表格 案例
  14. WebRTC 的音频弱网对抗之 NACK
  15. python excel 复制行_通过python复制excel行
  16. 创业过程中技术真的那么重要吗
  17. 解开Kafka神秘的面纱(二):Kafka的高效读写与消息安全
  18. Mac没有winnt格式_Mac本地视频播放软件----EVPlayer
  19. 【STL】C++ STL之stack详解
  20. 【企业架构设计实战】业务架构设计

热门文章

  1. 面试题6:用两个栈实现队列
  2. Exchange企业实战技巧(3)配置Exchange证书
  3. 2012/08/27 夜
  4. sql server性能分析--执行sql次数和逻辑次数
  5. Oracle不加IP无法登录,Oracle 无法通过IP连接问题
  6. Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv
  7. hung-yi lee_p15_机器学习深层网络比浅层网络好在哪
  8. 参加UI培训有发展吗?
  9. UI设计培训需要学哪些内容
  10. mysql干货——数据库字符集和校对规则详解