并查集都写不来了qwq

之前写的是错的

sz的初值都是0,这样怎么加就都是0了,水这道题还是可以,但是加强版就过不了了

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream> using namespace std; template<typename Q> Q &read(Q &x) {
static char c, f;
for(f = ; c = getchar(), !isdigit(c); ) if(c == '-') f = ;
for(x = ; isdigit(c); c = getchar()) x = x * + c - '';
if(f) x = -x; return x;
}
template<typename Q> Q read() {
static Q x; read(x); return x;
} const int N = + ; struct Node *newnode(int, Node *, Node *); struct Node {
int v;
Node *ch[];
int query(int l, int r, int k) {
if(l == r) return v;
int mid = (l + r) >> ;
if(k <= mid) return ch[]->query(l, mid, k);
else return ch[]->query(mid + , r, k);
}
Node *modify(int l, int r, int k, int w) {
if(l == r) return newnode(w, , );
int mid = (l + r) >> ;
if(k <= mid) return newnode(, ch[]->modify(l, mid, k, w), ch[]);
return newnode(, ch[], ch[]->modify(mid + , r, k, w));
}
}pool[N * ], *pis = pool; Node *newnode(int v, Node *lc, Node *rc) {
pis->v = v, pis->ch[] = lc, pis->ch[] = rc;
return pis++;
} int n, now; struct parr {
Node *root[N];
int vt;
void init(int w) {
root[] = newnode(w, pis, pis);
}
int get(int k, int h) const {
return root[h]->query(, n, k);
}
void modify(int k, int w) {
root[vt] = root[vt]->modify(, n, k, w);
}
void newver(int h) {
root[++vt] = root[h];
}
} sz, fa; int find(int x) {
int y;
while(x)
y = x, x = fa.get(x, now);
return y;
} void unite(int x, int y) {
sz.newver(now), fa.newver(now);
x = find(x), y = find(y);
if(x == y) return;
int sx = sz.get(x, now), sy = sz.get(y, now);
if(sx < sy) swap(x, y), swap(sx, sy);
fa.modify(y, x);
sz.modify(x, sx + sy);
now = sz.vt;
} int version[N];
int main() {
#ifdef DEBUG
freopen("in.txt", "r", stdin);
#endif sz.init(), fa.init();
int m, ans = ; read(n), read(m);
for(int i = ; i <= m; i++) {
int opt = read<int>();
if(opt == ) {
int u, v; read(u) ^= ans, read(v) ^= ans;
unite(u, v);
} else if(opt == ) {
int h; read(h) ^= ans;
now = version[h];
} else if(opt == ) {
int u, v; read(u) ^= ans, read(v) ^= ans;
printf("%d\n", ans = find(u) == find(v));
}
version[i] = now;
} return ;
}

bzoj3673 bzoj3674可持久化并查集的更多相关文章

  1. 【可持久化数组】【rope】bzoj3673 bzoj3674 可持久化并查集 by zky

    rope教程:http://blog.csdn.net/iamzky/article/details/38348653 Code(bzoj3673): #include<cstdio> # ...

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

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

  3. bzoj3674 可持久化并查集

    我是萌萌的任意门 可持久化并查集的模板题-- 做法好像很多,可以标号法,可以森林法. 本来有O(mloglogn)的神算法(按秩合并+倍增),然而我这种鶸渣就只会写O(mlog2n)的民科算法--再加 ...

  4. BZOJ3674: 可持久化并查集加强版

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3674 题解:主要是可持久化的思想.膜拜了一下hzwer的代码后懂了. 其实本质是可持久化fa数 ...

  5. 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)

    传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...

  6. [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky

    思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...

  7. [BZOJ3673&3674]可持久化并查集&加强版

    题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...

  8. BZOJ3673/3674:可持久化并查集

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

  9. [bzoj3673/3674可持久化并查集加强版]

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

随机推荐

  1. Android学习3—电话拨号器

    本测试主要实现了一个Android的拨打电话的功能 一:界面预览 由图中可以看出,这个Activity需要3个控件:TextView.EditText.Button 其实实现一个功能要经过几个步骤: ...

  2. JavaScript学习心得(二)

    一选择DOCTYPE DOCTYPE是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器使用什么样的文档类型定义(DTD)来解析文档. 网页从DOCTYPE开始,即<!DOCT ...

  3. Python 类型

    文章出处:http://www.cnblogs.com/winstic/,请保留此连接   python是动态类型语言,不需要预先声明变量的类型,变量类型和值在赋值的那一刻被初始化   python使 ...

  4. 学习Swift--下标脚本

    下标脚本 下标脚本可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问集合(collection),列表(list)或序列(sequenc ...

  5. [转]DOS命令

    windows dos命令 - 知识天地 - 博客园http://www.cnblogs.com/mfryf/archive/2012/02/13/2348685.html

  6. call和apply还有bind

    有图有真相 function myfun1(){ //这是私有属性 var private1 = "这是私有属性1"; var privateMethod = function() ...

  7. Jqgrid动态拖拽

    //注册事件 jQuery("#list1").jqGrid('setGridParam', { gridComplete : function() { $("#_emp ...

  8. 支付宝openssl漏洞肆虐 互联网巨头称目前已修复

    支付宝openssl漏洞肆虐 互联网巨头称目前已修复 金山毒霸安全专家李铁军表示,这个漏洞使黑客可以远程读取https服务器的随机64KB内存,“只要这个黑客有耐心多捕获多分析那些64KB的数据,用户 ...

  9. iOS获取图片的Base64String,兼容Android,java,web,jpg(jpeg),png

    呃呃呃……需求的来源又是同学,对!又是! 废话不哆嗦,怎么把一张图在iOS上转一个Base64String出来,稍微了解的,或者随便搜一下,都能搞定一大堆,但是!!!! 自己(iOS)转自己用,完全没 ...

  10. 【POJ2478】Farey Seque

    题意: 就是求2~n的所有欧拉函数值的和,这里就用到了快速求欧拉函数的方法.(不能暴力求了,不然必定TLE啊) 说说欧拉筛法,感觉十分机智啊~~ 对于上述代码的几个问题: 1.问:为什么i%prime ...