BZOJ 3647——可持久化并查集加强版

不会可持久化并查集先去做http://www.cnblogs.com/Fish-/p/8242582.html.

幼稚的以为直接交原来的就好了,结果T了!

加个路径压缩,but一直RE,请了几位大神还是解决不了。。所以先留个坑。。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 300050
int cnt=0,ls[maxn*40],rs[maxn*40],root[maxn],sz,key[maxn*40],n,m,i,v[maxn*40];
int read(){int w=0;char c=getchar();while(c<48||c>57) c=getchar();while(c>=48&&c<=57){w=w*10+c-48;c=getchar();}return w;
}
void build(int &p,int l,int r){p=++cnt;if(l==r) {key[p]=l;return;}if(l!=r){int mid=(l+r)/2;build(ls[p],l,mid);build(rs[p],mid+1,r);}
}
void Modify(int &p,int cmp,int l,int r,int loc,int val){if(v[p]!=i){p=++cnt;ls[p]=ls[cmp];rs[p]=rs[cmp];v[p]=i;}if(l==r){key[p]=val;}if(l!=r){int mid=(l+r)>>1;if(loc<=mid){Modify(ls[p],ls[cmp],l,mid,loc,val);}else{Modify(rs[p],rs[cmp],mid+1,r,loc,val);}}
}
inline int query(int version,int l,int r,int loc){int mid;while(l!=r){mid=(l+r)>>1;if(loc<=mid) version=ls[version],r=mid;else version=rs[version],l=mid+1;}return key[version];
}
int find(int version,int loc){int fa=query(root[version],1,n,loc);if(fa==loc) return fa;int anc=find(version,fa);Modify(root[version],root[version],1,n,loc,anc);return anc;
}
int main()
{int x,y,l,r,k,opt,lastans=0;n=read();m=read();build(root[0],1,n);for(i=1;i<=m;i++){opt=read();x=read()^lastans;if(opt==1){y=read()^lastans;Modify(root[i],root[i-1],1,n,find(root[i-1],x),find(root[i-1],y));}else if(opt==2) root[i]=root[x];else{y=read()^lastans;root[i]=root[i-1];lastans=(find(i,x)==find(i,y));if(lastans) printf("1\n");else printf("0\n");}}//printf("%d\n",cnt);
}

转载于:https://www.cnblogs.com/Fish-/p/8253032.html

[BZOJ 3647]相关推荐

  1. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  2. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  3. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  4. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  5. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  6. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

  7. BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...

  8. BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...

  9. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

最新文章

  1. Oracle Golden Gate体系架构详解(原创) - CzmMiao的博客生活 - ITeye技术网站
  2. [经典算法] 八枚硬币
  3. [转载] 七龙珠第一部——第070话 五人战士大突击
  4. 明确需求与功能,优化小打卡的分享刺激点
  5. 随笔(二)-- PyCharm如何更改背景图片
  6. 18个堪称神器的命令行工具,高效运维必备
  7. 【原】postman常用设置全局变量的js片段
  8. python ssl_Python3 ssl模块不可用的问题
  9. OpenCASCADE 麻花钻头造型实例分析
  10. SPA (单页应用程序)
  11. MATLAB基础学习笔记01:初探MATLAB世界
  12. 你必须掌握的常用正则表达式大全
  13. ARM、DSP、FPGA的区别
  14. 国家统计局全国统计用区划代码和城乡划分代码Python爬虫样例
  15. 《医院信息系统(HIS)软件基本功能规范》98版 [赏析]
  16. [HITS算法]Authoritative Sources in a Hyperlinked Environment
  17. 在设备上启用开发者选项
  18. oracle修改redo路径,在线修改redo文件的路径
  19. 浅析Simpson算法
  20. macbook 终端命令怎么使用_苹果MAC系统怎么使用ping命令打开终端?

热门文章

  1. Vue之实例的生命周期
  2. excel服务器2010网站,excel服务器2010
  3. saltstack mysql_saltstack学习五:return及入库_MySQL
  4. Confluence 6 在 Apache 或者系统级别阻止垃圾
  5. PAT甲题题解-1128. N Queens Puzzle (20)-做了一个假的n皇后问题
  6. C++ primer 笔记(二)
  7. Vue中import引入模块路径时的@符号
  8. 拖拽升空的Android小火箭
  9. eslint airbnb 不允许尾随逗号
  10. VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏