bzoj3673 bzoj3674可持久化并查集
并查集都写不来了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可持久化并查集的更多相关文章
- 【可持久化数组】【rope】bzoj3673 bzoj3674 可持久化并查集 by zky
rope教程:http://blog.csdn.net/iamzky/article/details/38348653 Code(bzoj3673): #include<cstdio> # ...
- bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...
- bzoj3674 可持久化并查集
我是萌萌的任意门 可持久化并查集的模板题-- 做法好像很多,可以标号法,可以森林法. 本来有O(mloglogn)的神算法(按秩合并+倍增),然而我这种鶸渣就只会写O(mlog2n)的民科算法--再加 ...
- BZOJ3674: 可持久化并查集加强版
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3674 题解:主要是可持久化的思想.膜拜了一下hzwer的代码后懂了. 其实本质是可持久化fa数 ...
- 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky
思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...
- [BZOJ3673&3674]可持久化并查集&加强版
题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...
- BZOJ3673/3674:可持久化并查集
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- [bzoj3673/3674可持久化并查集加强版]
n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2 ...
随机推荐
- Codeforces 549B Looksery Party
Looksery Party Solution: 仔细分析一下会发现每个人都会发一条消息给自己这个条件非常重要! 这个条件保证了一定会有解,而且解法也要从这里入手. 当我们拿到一个猜测的答案序列的时候 ...
- StandardServiceRegistryBuilder
org.hibernate.boot.registry.StandardServiceRegistryBuilderhibernate4.3 Configuration cfg = new Confi ...
- Linux 多用户和多用户边界
1. 需求背景 2. 多用户的边界: 独立的工作目录 3. 多用户的边界:可操作/访问的资源 4. 多用户的边界: 可执行的操作 5. 多用户的特性标识: UID和GID -------------- ...
- word的不同章节之间添加不同的页眉
1.点击空百处 2. 在页面布局中,找到分隔符,选择”连续“选项,即在空白处插入分隔符 特别注意:这里分隔符会出现换行现象,请选择空白处,不要影响原先布局 3. 当编辑下一个页眉时,点击“链接到前一条 ...
- 全连接的BP神经网络
<全连接的BP神经网络> 本文主要描述全连接的BP神经网络的前向传播和误差反向传播,所有的符号都用Ng的Machine learning的习惯.下图给出了某个全连接的神经网络图. 1前向传 ...
- 《Braid》碎片式台词
谁见到过风? 你没有,我也没有. 但当树儿低下头, 便是风儿经过时. 便是风儿穿过的时候. 但当树叶微微摇首, 你没有,我也没有. 谁见到过风? 二.时间与宽恕 1.提姆要出发了!他要去寻找并救出公主 ...
- Android项目无法运行的解决方法
文件本身是否有问题 有两种方法可以判断:1.比较快捷的办法就是用解压软件打开或者解压的过程中有没有弹出什么错误提示,如果有错误提示那就重新下载一遍文件(javaapk用的压缩工具是winrar4.0, ...
- mysql中使用concat例子
数据库为mysql,需要把旧门店记录的note字段的资料追加到新门店的note资料的后面 旧记录id为old_terminal_id,新记录id为new_terminal_id,提供格式如下:
- bzoj 1014: [JSOI2008]火星人prefix hash && splay
1014: [JSOI2008]火星人prefix Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3154 Solved: 948[Submit][ ...
- bzoj 2631: tree 动态树+常数优化
2631: tree Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1716 Solved: 576[Submit][Status] Descrip ...