[BZOJ 3647]
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]相关推荐
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec Memory Limit: 512 MB Submit: 53 Solved: 9 [Su ...
- BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...
- BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...
- BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...
最新文章
- Oracle Golden Gate体系架构详解(原创) - CzmMiao的博客生活 - ITeye技术网站
- [经典算法] 八枚硬币
- [转载] 七龙珠第一部——第070话 五人战士大突击
- 明确需求与功能,优化小打卡的分享刺激点
- 随笔(二)-- PyCharm如何更改背景图片
- 18个堪称神器的命令行工具,高效运维必备
- 【原】postman常用设置全局变量的js片段
- python ssl_Python3 ssl模块不可用的问题
- OpenCASCADE 麻花钻头造型实例分析
- SPA (单页应用程序)
- MATLAB基础学习笔记01:初探MATLAB世界
- 你必须掌握的常用正则表达式大全
- ARM、DSP、FPGA的区别
- 国家统计局全国统计用区划代码和城乡划分代码Python爬虫样例
- 《医院信息系统(HIS)软件基本功能规范》98版 [赏析]
- [HITS算法]Authoritative Sources in a Hyperlinked Environment
- 在设备上启用开发者选项
- oracle修改redo路径,在线修改redo文件的路径
- 浅析Simpson算法
- macbook 终端命令怎么使用_苹果MAC系统怎么使用ping命令打开终端?
热门文章
- Vue之实例的生命周期
- excel服务器2010网站,excel服务器2010
- saltstack mysql_saltstack学习五:return及入库_MySQL
- Confluence 6 在 Apache 或者系统级别阻止垃圾
- PAT甲题题解-1128. N Queens Puzzle (20)-做了一个假的n皇后问题
- C++ primer 笔记(二)
- Vue中import引入模块路径时的@符号
- 拖拽升空的Android小火箭
- eslint airbnb 不允许尾随逗号
- VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏