[bzoj] 3673 3674 可持久化并查集 || 可持久化数组
原题
加强版
题意:
可持久化并查集模板……
题解:
用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态。
不能用路径压缩,但是要按置合并,使复杂度保证在O(log)
#include<cstdio>
#include<algorithm>
#define N 200010
#define M 5000010
using namespace std;
int n,m,f[N],root[N],cnt,sze[M];
struct hhh
{
int ls,rs,sum;
}tre[M];
int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
void change(int &now,int old,int l,int r,int x,int y)
{
now=++cnt;
tre[now].rs=tre[old].rs;
tre[now].ls=tre[old].ls;
if (l==r) return (void)(tre[now].sum=y);
int mid=(l+r)>>1;
if (x>mid) change(tre[now].rs,tre[old].rs,mid+1,r,x,y);
else change(tre[now].ls,tre[old].ls,l,mid,x,y);
}
void add(int &i,int old,int l,int r,int pos)
{
i=++cnt;
tre[i].ls=tre[old].ls;
tre[i].rs=tre[old].rs;
if (l==r) return (void)(sze[i]=sze[old]+1);
int mid=(l+r)>>1;
if (pos<=mid) add(tre[i].ls,tre[old].ls,l,mid,pos);
else add(tre[i].rs,tre[old].rs,mid+1,r,pos);
}
int query(int i,int l,int r,int x)
{
if (!i) return x;
if (l==r) return tre[i].sum?tre[i].sum:x;
int mid=(l+r)>>1;
if (x>mid) return query(tre[i].rs,mid+1,r,x);
return query(tre[i].ls,l,mid,x);
}
int find(int now,int x)
{
int fa;
while (1)
{
fa=query(root[now],1,n,x);
if (x==fa) return x;
x=fa;
}
}
int main()
{
n=read();m=read();
int a,b,op,x,y;
for (int i=1;i<=m;i++)
{
op=read();a=read();
if (op==1)
{
root[i]=root[i-1];
b=read();
x=find(i,a);y=find(i,b);
if (x==y) continue;
if (sze[x]>sze[y]) change(root[i],root[i],1,n,y,x);
else change(root[i],root[i],1,n,x,y);
if (sze[x]==sze[y]) add(root[i],root[i],1,n,y);
}
else if (op==2) root[i]=root[a];
else root[i]=root[i-1],b=read(),(find(i,a)==find(i,b))?puts("1"):puts("0");
}
return 0;
}
[bzoj] 3673 3674 可持久化并查集 || 可持久化数组的更多相关文章
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树
[BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...
- BZOJ.3673/3674.可持久化并查集(可持久化线段树 按秩合并/启发式合并)
BZOJ 3673 BZOJ 3674(加强版) 如果每次操作最多只修改一个点的fa[],那么我们可以借助可持久化线段树来O(logn)做到.如果不考虑找fa[]的过程,时空复杂度都是O(logn). ...
- 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】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
随机推荐
- linux-centos6②
- 第五模块·WEB开发基础-第2章JavaScript基础
第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...
- List和String数组相互转化
在工作中经常会遇到需要String[] 参数的地方,我们可以先定义一个list,再转成String[] 来使用,使用list的好处自然是可以随时方便的添加删除元素,下面是方法: List list = ...
- python 打包
一.下载 pip install Pyinstaller 二.使用Pyinstaller 1.使用下载安装的方式安装的Pyinstaller打包方式 将需要打包的文件放在解压得到的Pyinstalle ...
- 聊一聊session
最近从上家公司离职了,到了一家新公司,这几天一直在了解他们的项目,所以我自己的那个小项目也暂时搁浅了.. 今天差不多把他们的项目了解了,来院子写写我在这里边遇到的问题,影响最深刻的是seesion的. ...
- 【MFC】VS2017新建完MFC后,没有界面,只有代码
问题描述:双击.rc文件后提示在另一个编辑器中打开 解决方法整合: 1----- 打开工程之前先把.rc文件改个名称,然后打开工程双击解决方案管理器的.rc文件, 会显示"载入失败" ...
- hive创建外部表
Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] ...
- codeforces 295C Greg and Friends(BFS+DP)
One day Greg and his friends were walking in the forest. Overall there were n people walking, includ ...
- angularJS遇到的坑
最近在用angularjs做一些东西,由于学艺不精,对angularjs了解不够,导致经常会不小心掉进一些自己挖的坑里(⊙_⊙),在这里记下来,谨防又踩. 1.angularjs ng-show no ...
- 一个例子说明mouseover事件与mouseenter事件的区别
<html> <head> <meta charset="UTF-8"> <title>haha</title> < ...