本质上是维护两个可持久化数组,用可持久化线段树维护.

 /**************************************************************
Problem: 3673
User: idy002
Language: C++
Result: Accepted
Time:76 ms
Memory:13780 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#define N 20010
using namespace std; struct Node {
int u, p, s;
Node *ls, *rs;
}pool[N*], *tail=pool, *root[N]; int n, m;
Node *build( int lf, int rg ) {
Node *nd = ++tail;
if( lf==rg ) {
nd->u = lf;
nd->p = lf;
nd->s = ;
return nd;
}
int mid=(lf+rg)>>;
nd->ls = build( lf, mid );
nd->rs = build( mid+, rg );
return nd;
}
Node *modify( Node *nd, int lf, int rg, int u, int p, int s ) {
Node *nn = ++tail;
if( lf==rg ) {
nn->u = u;
nn->p = p;
nn->s = s;
return nn;
}
int mid=(lf+rg)>>;
if( u<=mid ) {
nn->ls = modify( nd->ls, lf, mid, u, p, s );
nn->rs = nd->rs;
} else {
nn->ls = nd->ls;
nn->rs = modify( nd->rs, mid+, rg, u, p, s );
}
return nn;
}
Node *query( Node *nd, int lf, int rg, int u ) {
if( lf==rg ) return nd;
int mid=(lf+rg)>>;
if( u<=mid ) return query(nd->ls,lf,mid,u);
else return query(nd->rs,mid+,rg,u);
} Node *find( Node *r, int a ) {
Node *na = query(r,,n,a);
while( na->u!=na->p ) na=query(r,,n,na->p);
return na;
}
int main() {
scanf( "%d%d", &n, &m );
root[] = build(,n);
for( int i=,opt,a,b,k; i<=m; i++ ) {
scanf( "%d", &opt );
if( opt== ) {
scanf( "%d%d", &a, &b );
root[i] = root[i-];
Node *na = find(root[i],a);
Node *nb = find(root[i],b);
if( na==nb ) continue;
if( na->s > nb->s ) swap(na,nb);
root[i] = modify( root[i], , n, na->u, nb->u, na->s );
root[i] = modify( root[i], , n, nb->u, nb->u, na->s+nb->s );
} else if( opt== ) {
scanf( "%d", &k );
root[i] = root[k];
} else {
scanf( "%d%d", &a, &b );
root[i] = root[i-];
printf( "%d\n", find(root[i],a)->u==find(root[i],b)->u );
}
}
}

bzoj 3673 可持久化并查集的更多相关文章

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

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

  2. BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树

    既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...

  3. BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3673 题意: 思路: 可持久化数组可以用可持久化线段树来实现,并查集的查询操作和原来的一般并查集操作 ...

  4. bzoj 3673 可持久化并查集 by zky

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

  5. BZOJ 3674 可持久化并查集加强版(主席树变形)

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2515  Solved: 1107 [Submit][Sta ...

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

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

  7. BZOJ 3674 可持久化并查集加强版(路径压缩版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  8. BZOJ 3674 可持久化并查集加强版(按秩合并版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

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

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

随机推荐

  1. webpack快速入门——CSS进阶:自动处理CSS3前缀

    为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...

  2. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

  3. python解析minicap

    上篇知道了minicap发送图片的格式,照着官网的app.js代码,改用一个python版的来解析它,适当扩展,可以做个小工具实时显示手机屏幕. 步骤: 一.手机开启minicap服务 adb she ...

  4. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  5. ASP.NET私有构造函数作用

    一.私有构造函数的特性 1.一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员. 2.私有构造函数是一种特殊的实例构造函数.它通常用在 ...

  6. AngularJS -- 代码实例

    整理书籍内容(QQ:283125476 发布者:M [重在分享,有建议请联系->QQ号]) ng-change 当文本输入字段中内容发生了变化,就会改变equation.x的值: <bod ...

  7. Tensorflow数据读取的方式

    深度学习既然是基于数据的方法,先不管多抽象,那总归是有读取数据的方法的吧,这里的数据应该是一个统称,包含我们讲的数据集和变量tensor. tf读取数据一共有3种方法: 供给数据(Feeding): ...

  8. CSS position:absolute浅析

    一.绝对定位的特征 绝对定位有着与浮动一样的特性,即包裹性和破坏性. 就破坏性而言,浮动仅仅破坏了元素的高度,保留了元素的宽度:而绝对定位的元素高度和宽度都没有了. 请看下面代码: <!DOCT ...

  9. spring的普通类中获取session和request对像

    在使用spring时,经常需要在普通类中获取session,request等对像. 1.第一钟方式,针对Spring和Struts2集成的项目: 在有使用struts2时,因为struts2有一个接口 ...

  10. linux内核环形缓冲区【转】

    转自:https://blog.csdn.net/eydwyz/article/details/56671023 循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前提是,生产者和消费 都只有一个 ...