bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版
主席树可持久化数组,还挺好YY的
然而加强版要路径压缩。。
发现压了都RE
结果看了看数据,默默的把让fx的父亲变成fy反过来让fy的父亲变成fx
搞笑啊
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n;
struct chairman_tree
{
int lc,rc,c;
}tr[];int trlen,rt[];
int maketree(int now,int l,int r,int p,int k)
{
if(now==)now=++trlen;
tr[now].lc=tr[now].rc=;
tr[now].c=-; if(l==r)tr[now].c=k;
else
{
int mid=(l+r)/;
if(p<=mid)tr[now].lc=maketree(tr[now].lc,l,mid,p,k);
else tr[now].rc=maketree(tr[now].rc,mid+,r,p,k);
}
return now;
}
int merge(int x,int y)
{
if(x==||y==)return x+y;
tr[x].lc=merge(tr[x].lc,tr[y].lc);
tr[x].rc=merge(tr[x].rc,tr[y].rc);
return x;
} int gofind(int now,int l,int r,int p)
{
if(l==r)return tr[now].c;
int mid=(l+r)/;
if(p<=mid)return gofind(tr[now].lc,l,mid,p);
else return gofind(tr[now].rc,mid+,r,p);
}
int findfa(int t,int x)
{
int F=gofind(rt[t],,n,x);
if(F==x)return x;
int tf=findfa(t,F);
if(tf!=F)
{
int root=rt[t];
rt[t]=maketree(,,n,x,tf);
rt[t]=merge(rt[t],root);
}
return tf;
} int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int Q;
scanf("%d%d",&n,&Q);
trlen=;memset(rt,,sizeof(rt));
for(int i=;i<=n;i++)
{
rt[i]=maketree(rt[i],,n,i,i);
rt[i]=merge(rt[i],rt[i-]);
} int op,x,y,tim=,ans=;
while(Q--)
{
scanf("%d",&op);
if(op==)
{
scanf("%d%d",&x,&y);
int fx=findfa(tim+n,x);
int fy=findfa(tim+n,y);
tim++;
rt[tim+n]=maketree(rt[tim+n],,n,fy,fx);
rt[tim+n]=merge(rt[tim+n],rt[tim+n-]);
}
else if(op==)
{
scanf("%d",&x);
tim++;
rt[tim+n]=rt[x+n];
}
else
{
scanf("%d%d",&x,&y);
int fx=findfa(tim+n,x);
int fy=findfa(tim+n,y);
ans=(fx==fy);
printf("%d\n",ans);
tim++;
rt[tim+n]=rt[tim+n-];
}
}
return ;
}
bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版的更多相关文章
- 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- BZOJ3673 可持久化并查集 by zky 【主席树】
BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...
- 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...
- 3673: 可持久化并查集 by zky
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2170 Solved: 978[Submit][Status ...
- Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...
- bzoj 3673&3674: 可持久化并查集 by zky
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
随机推荐
- vue vuex初学基础 常见错误解决方式
前端界面使用篇 vue生命周期初始化事件 http://www.cnblogs.com/lily1010/p/5830946.html 常见错误篇 1 Newline required at end ...
- windows phone传感器
Windows phone中的传感器主要包括加速计传感器.罗盘传感器.陀螺仪传感器等 加速计传感器 Accelerometer类是加速传感器的接口,Accelerometer类位于Windows.De ...
- 初次尝试PHP——一个简单的对数据库操作的增删改查例子
第一次学习PHP,很多人说PHP是最好的语言,学习了一点点,还不敢说这样的话,不过确实蛮好用的. 做了一个简单的对数据库的增删改查的操作,主要是将四种操作写成了独立的函数,之后直接调用函数.以下是代码 ...
- 项目平台统一(前后端IDE、代码风格)
项目平台统一(前后端IDE.代码风格) 记录人:娄雨禛 前端:Webstorm(HTML+CSS+JavaScript) 后端:IntelliJ IDEA(Java) 代码风格:Java风格代码 代码 ...
- 阶乘问题-----sum随变量改变而改变
- 【PostgreSQL-9.6.3】函数(1)--数值型函数
函数表示对输入参数返回一个特殊计算结果的值.PostgreSQL中的函数种类比较丰富,主要分为以下几类:数值型函数.字符型函数.日期和时间函数.条件判断函数.系统函数.加密函数以及其他函数.这篇文章只 ...
- SQL Server之十大存储过程
下面介绍十大不同类型存储过程. 用户自定义存储过程 . 创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据 ...
- java Web(3)
Servlet 是运行在Web服务器或应用服务器上的Java程序 在Web上创建动态内容的有效而强大的解决方案 由容器来管理生命周期与Web服务器交互 由Sun规范了其功能 Servlet部署: 一个 ...
- (转) OpenLayers3基础教程——加载资源
概述: 本节讲述如何在Ol3中加载wms图层并显示到地图中. Ol3下载: 你可以在OL官网去下载,下载地址为http://openlayers.org/download/,也可以去我的百度云盘下载, ...
- Maven服务器的使用之Maven桌面项目和Maven Web项目的创建
Maven的使用 Maven功能强大, 可以参与管理软件的整个生命周期. Java软件开发中的jar包管理更是Maven的绝技. 1.创建Maven桌面项目 1.1 选择菜单创建Maven项目 1.2 ...