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 ...
随机推荐
- c++primerplus(第六版)编程题——第4章(复合类型)
声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ...
- ecmall数据库基本操作
ecmall数据库基本操作,为了认真研究ecmall二次开发,我们必须熟悉ecamll的数据库结构,ecmall数据库结构研究熟悉之后,才能去认真分析ecamll的程序结构.从而实现ecmall二次开 ...
- web版扫雷小游戏(三)
~~~接上篇,上篇介绍了游戏实现过程中第一个比较繁琐的地方,现在展现在玩家面前的是一个有血有肉的棋盘,从某种意义上说玩家已经可以开始游戏了,但是不够人性化,玩家只能一个一个节点的点开,然后判断,然后标 ...
- JavaScript学习心得(四)
条件语句 任何事物非真即假. 在JavaScript中,条件判断以下情况为假: false NaN 0 空串 null undefined 在使用相等运算符时,建议将数字写在相等运算符的左边.全等比较 ...
- ubuntu 选择最快得源
root权限.新版的Ubuntu(12.04)已经不再自带类似apt-spy之类的选择最快的源的命令行工具,默认的源经常那个龟速啊……手动测试哪个源在当前网络环境下会比较快还是比较累的,这里整理一个脚 ...
- SQL语句の循环添加数据
declare @i intset @i=1while @i<=1000begininsert into News_ITM(title,msg,subDateTime,author,imageP ...
- 网页端启动WinForm
网页端启动WinForm 程序 在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓 ...
- java答疑
问 什么是 Java 的字节码? 答 它是程序的一种低级表示,可以运行于 Java 的虚拟机.将程序抽象为字节码可以保证 Java 程序员的 代码能够运行在各种设备之上. 问 Java 允许整型溢出并 ...
- [BZOJ 2178] 圆的面积并 【Simpson积分】
题目链接:BZOJ - 2178 题目分析 用Simpson积分,将圆按照 x 坐标分成连续的一些段,分别用 Simpson 求. 注意:1)Eps要设成 1e-13 2)要去掉被其他圆包含的圆. ...
- Android开源项目发现--- 工具类图片缓存篇(持续更新)
1. Android-Universal-Image-Loader 图片缓存 目前使用最广泛的图片缓存,支持主流图片缓存的绝大多数特性. 项目地址:https://github.com/nostra1 ...