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 ...
随机推荐
- Trac的使用思考
为什么要使用Trac? 这是由于在软件开发当中需要设定阶段性的目标,和进行文档的统一归档,并且便于进行多人协同工作. Trac是基于Python开发的.所以要使用Trac就需要对于Python有一定的 ...
- JavaScript学习总结【5】、JS DOM
1.DOM 简介 当页面加载时,浏览器会创建页面的文档对象模型(Document Object Model).文档对象模型定义访问和处理 HTML 文档的标准方法.DOM 将 HTML 文档呈现为带有 ...
- mysql5.7下载与安装,php5.6与mysql5.7整合
Part1 mysql5.7下载 百度“mysql下载”,打开官网 2. 在页面右上角点击,注册/登录 3. 登录后显示下载页面,选择windows 4. 然后选择MySQL Installer ...
- phpcms v9使用GET调用指定id文章内容、页面数据方法
不知道大家有没有相同的体会?在使用Phpcms V9建站调用数据的时候,基础的数据用默认的模板的调用语句就好了,但复杂不常见的数据怎么调用呢?我们技术可能会研究半天,怀着探索的精神不断尝试.孜孜不倦. ...
- 哈希表(hashtable)的javascript简单实现
javascript中没有像c#,java那样的哈希表(hashtable)的实现.在js中,object属性的实现就是hash表,因此只要在object上封装点方法,简单的使用obejct管理属性的 ...
- POJ 1013 Counterfeit Dollar 集合上的位运算
Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...
- Servlet处理Cookie
1.CGI:进程,servlet:线程 2.HttpServletResponse下的方法就没有get开头的,(PrintWriter)getWriter在ServletResponse下. 3.st ...
- WINDOWS下简单操作SQLITE3
有测试操作的时候,还是很好的说~~~ 找个sqlite3.txt下载 sqlite3.exe db.sqlite3 SQLite version 3.7.13 2012-06-11 02:05:22 ...
- Qt4.8 移植(超详细Configure的参数)
Qt4.8.6 configure 参数 不只是适用于Qt4.8.6,原则上适用于Qt4所有版本 Usage: configure [-h] [-prefix <dir>] [-prefi ...
- Haskell缩进规则
Haskell也是使用缩进来表示一个表达式或者块延伸的范围的,这点与Python类似.Haskell的缩进规则简单总结起来只用下面三条: 1. 源文件中第一个顶级的定义或者声明的缩进,定义了该文 ...