BZOJ 3674 可持久化并查集加强版 可持久化并查集
题目大意:同3673 强制在线
同3673 仅仅只是慢了一些0.0
这道题仅仅写路径压缩比仅仅写启示式合并要快一点点 两个都写就慢的要死0.0
改代码RE的可能是内存不够
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 200200
using namespace std;
struct Tree{
Tree *ls,*rs;
int num;
}*fa[M],mempool[M*60],*C=mempool;
int n,m,ans,now,version[M],tot;
inline Tree* New_Node(Tree *_,Tree *__,int ___)
{
C->ls=_;
C->rs=__;
C->num=___;
return C++;
}
Tree* Modify(Tree *p,int x,int y,int pos,int val)
{
int mid=x+y>>1;
if(x==y)
return New_Node(0x0,0x0,val);
if(pos<=mid)
return New_Node(Modify(p->ls,x,mid,pos,val),p->rs,0);
else
return New_Node(p->ls,Modify(p->rs,mid+1,y,pos,val),0);
}
int Access(Tree *p,int x,int y,int pos)
{
int mid=x+y>>1;
if(x==y)
return p->num;
if(pos<=mid)
return Access(p->ls,x,mid,pos);
else
return Access(p->rs,mid+1,y,pos);
}
int Find(int x)
{
int fx=Access(fa[now],1,n,x);
if(!fx)
return x;
int t=Find(fx);
Modify(fa[now],1,n,x,t);
return t;
}
inline void Unite(int x,int y)
{
int fx=Find(x),fy=Find(y);
if(fx==fy)
return;
++tot;
fa[tot]=Modify(fa[now],1,n,fy,fx);
now=tot;
}
inline bool Query(int x,int y)
{
return Find(x)==Find(y);
}
int main()
{
int i,p,x,y;
cin>>n>>m;
fa[0]=New_Node(C,C,0);
for(i=1;i<=m;i++)
{
scanf("%d",&p);
switch(p)
{
case 1:scanf("%d%d",&x,&y),Unite(x^ans,y^ans);break;
case 2:scanf("%d",&x),now=version[x^ans];break;
case 3:scanf("%d%d",&x,&y),printf("%d\n",ans=Query(x^ans,y^ans));break;
}
version[i]=now;
}
}
BZOJ 3674 可持久化并查集加强版 可持久化并查集的更多相关文章
- BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树
既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...
- 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树
[BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...
- bzoj 3674 可持久化并查集加强版——可持久化并查集
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 用主席树维护 fa[ ] 和 siz[ ] .改 fa[ ] 和改 siz[ ] 都 ...
- BZOJ3674 可持久化并查集加强版 可持久化 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...
- BZOJ 3674 可持久化并查集加强版(路径压缩版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- BZOJ 3674 可持久化并查集加强版(按秩合并版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- 【BZOJ】【3673】可持久化并查集 & 【3674】可持久化并查集加强版
可持久化并查集 Orz hzwer & zyf 呃学习了一下可持久化并查集的姿势……其实并查集就是一个fa数组(可能还要带一个size或rank数组),那么我们对并查集可持久化其实就是实现一个 ...
- BZOJ 3674 可持久化并查集加强版(主席树变形)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Submit: 2515 Solved: 1107 [Submit][Sta ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
随机推荐
- 让magento的validate验证hidden field
Object.extend(Validation, { isVisible : function(elm) { return true; }, insertAdvice : function(elm, ...
- Hide a file in a picture
有时候.假设你想在电脑上隐藏关键的文件而不想让其它人看见.你会怎么做呢?找一个专业的工具?为目录设置password?更改文件属性?这些方法可行.但它们可能不太方便和安全.这里,我给大家共享一个在图片 ...
- JQ选择器
jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个 ...
- 将已有项目导入Gitlab
登陆GitLab,创建添加项目. 写入项目的基本信息,包括名称.描述.权限等等. cd existing_folder git init git remote add origin git@10.10 ...
- Crystal Report分組中的序號重新遞增
客戶要批次列印發票,也就是報表需要按照發票號碼(INV_NO)進行分組,每個發票里還有明細的item,之前因為直接抓RecordNumber,所以該欄位只能從1開始計數,遇到新的發票發號不會重新從1開 ...
- .Net中如何使用MySql连接池
提供一份官方的译文.翻译也挺辛苦的!! 6.4 Using Connector/Net with Connection Pooling 6.4在Connector/Net中使用连接池 The Conn ...
- qt界面不显示的原因
用qt designer弄了一个qq.ui 新建一个空项目,把qq.ui加入,新建一个qq类,qq.h如下 #ifndef QQ#define QQ #include <QMainWindow& ...
- [Linked List]Convert Sorted List to Binary Search Tree
Total Accepted: 57775 Total Submissions: 198972 Difficulty: Medium Given a singly linked list where ...
- 一段简单c程序的汇编语言学习(ubuntu+x86)
c程序代码: #include <stdio.h> int main(void) { int i=0, j=0; for(i=0; i<8; i++) j=j+1; return 0 ...
- push() & concat()
eg. var arr = []; arr.push(1); arr.push([2, 3]); arr.push(4, 5); arr = arr.concat(6); arr = arr.conc ...