主席树可持久化数组,还挺好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: 可持久化并查集加强版的更多相关文章

  1. 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  2. bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版

    bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...

  3. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  4. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

  5. BZOJ3673 可持久化并查集 by zky 【主席树】

    BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...

  6. 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树

    没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...

  7. 3673: 可持久化并查集 by zky

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2170  Solved: 978[Submit][Status ...

  8. Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)

    3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...

  9. bzoj 3673&3674: 可持久化并查集 by zky

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

随机推荐

  1. C# 多线程系列(四)

    Parallel类 Parallel类定义了for.foreach和invoke的静态方法.Parallel类使用多个任务,因此使用多个线程来完成这个作业. Parallel.For Parallel ...

  2. ★Java语法(五)——————————三元运算符

    package 课上练习; public class 三元运算符 { //用法: 数据类型 变量 = 布尔表达式? 条件满足设置内容:条件不满足设置内容 : public static void ma ...

  3. dubbo之泛化引用

    使用泛化调用 泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 Gene ...

  4. php实现非对称加密

    <?php /** * 使用openssl实现非对称加密 * * @since 2015-11-10 */ class Rsa { /** * 私钥 * */ private $_privKey ...

  5. Visual Studio Code 插件推荐

    Path Intellisense - 路径补全 HTML Snippets - HTML 标记增强 Markdown+Math - Markdown 增强(数学表达式) vscode-icons - ...

  6. jquery Contains 实现查询

    var filter = $(this).val(); var filterResult = $(this).find('h2:Contains(' + filter + ')'); if (filt ...

  7. H3C交换机配置常用命令(转)

    1.配置文件相关命令 [Quidway]display current-configuration //显示当前生效的配置 [Quidway]display saved-configuration / ...

  8. Django 路由视图FBV/CBV

    路由层  url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...

  9. yum的方式搭建mysql

    1.安装相应的软件yum install mysql : 安装mysql客户端 yum install mysql-server 安装服务端 yum install mysql-devel 安装相关的 ...

  10. C++ 资源大全中文版

    标准库 C++标准库,包括了STL容器,算法和函数等. C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Tem ...