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

 /**************************************************************
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. POJ-3295 Tautology (构造)

    https://vjudge.net/problem/POJ-3295 题意 有五种运算符和五个参数,现在给你一个不超过100字符的算式,问最后结果是否恒为1? 分析 首先明确各运算符的意义,K(&a ...

  2. hdu 5755 Gambler Bo (高斯消元法解同余方程组)

    http://acm.hdu.edu.cn/showproblem.php?pid=5755 题意: n*m矩阵,每个格有数字0/1/2 每选择一个格子,这个格子+2,4方向相邻格子+1 如何选择格子 ...

  3. WebSockets Tutorial(教程一)WebSockets简介

    一.WebSockets简介 以字面意思来说,握手可以被定义为两个人抓住和握手右手,象征着问候,祝贺,同意或告别.在计算机科学中,握手是确保服务器与客户端同步的过程.握手是Web Socket协议的基 ...

  4. js 正则之 检测素数

    相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的,我就不啰嗦了.我们来说说 j ...

  5. 略显犀利的 js 判断闰年

    /** * 判断闰年函数 * @param {number} year 要判断的年份 * @return {bool} 返回布尔值 * * 其实只要满足下面几个条件即可. * 1.普通年能被4整除且不 ...

  6. 关于System.getProperty("java.io.tmpdir");的输出,及System.getProperty();参数

    1,首先来介绍下System.getProperty("java.io.tmpdir")输出因为这个输出有点特殊. 理论介绍:他是获取系统临时目录.可以是window的temp,l ...

  7. iOS常用小功能

    CHENYILONG Blog 常用小功能 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  ...

  8. 【洛谷P2420】让我们异或吧

    题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...

  9. linux服务器如何添加sudo用户

    1. 编辑 vi /etc/ssh/sshd_config 文件,修改默认端口:默认Port为22,并且已经注释掉了,修改是把注释去掉,并修改成其它的端口. 原来用默认端口:22修改为:8975 (这 ...

  10. ApiCloud利用NVTabBar模块快速搭建起APP的框架

    废话不说,直接上代码 模块地址:https://docs.apicloud.com/Client-API/Nav-Menu/NVTabBar 代码实例: <!doctype html> & ...