BZOJ3674可持久化并查集(模板)
没什么可说的,就是一个可持久化线段树维护一个数组fa以及deep按秩合并好了
注意一下强制在线
蒟蒻的我搞了好长时间QAQ
贴代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
struct trnt{
int ls;
int rs;
int fa;
int dp;
}tr[];
int root[];
int siz;
int n,m;
int lastans;
void Tr_build(int l,int r,int &spc)
{
if(!spc)
spc=++siz;
if(l==r)
{
tr[spc].fa=l;
return ;
}
int mid=(l+r)/;
Tr_build(l,mid,tr[spc].ls);
Tr_build(mid+,r,tr[spc].rs);
return ;
}
int ask(int l,int r,int pos,int spc)
{
if(l==r)
return spc;
int mid=(l+r)/;
if(pos<=mid)
return ask(l,mid,pos,tr[spc].ls);
return ask(mid+,r,pos,tr[spc].rs);
}
int finf(int rt,int x)
{
int ff=ask(,n,x,rt);
if(tr[ff].fa==x)
return ff;
return finf(rt,tr[ff].fa);
}
void unin(int l,int r,int &spc,int last,int pos,int ff)
{
spc=++siz;
if(l==r)
{
tr[spc].fa=ff;
tr[spc].dp=tr[last].dp;
return ;
}
tr[spc].ls=tr[last].ls;
tr[spc].rs=tr[last].rs;
int mid=(l+r)/;
if(pos<=mid)
unin(l,mid,tr[spc].ls,tr[last].ls,pos,ff);
else
unin(mid+,r,tr[spc].rs,tr[last].rs,pos,ff);
return ;
}
void grow(int l,int r,int pos,int spc)
{
if(l==r)
{
tr[spc].dp++;
return ;
}
int mid=(l+r)/;
if(pos<=mid)
grow(l,mid,pos,tr[spc].ls);
else
grow(mid+,r,pos,tr[spc].rs);
return ;
}
int main()
{
scanf("%d%d",&n,&m);
Tr_build(,n,root[]);
for(int i=;i<=m;i++)
{
root[i]=root[i-];
int cmd;
scanf("%d",&cmd);
if(cmd==)
{
int x,y;
scanf("%d%d",&x,&y);
x=x^lastans;
y=y^lastans;
x=finf(root[i],x);
y=finf(root[i],y);
if(tr[x].fa==tr[y].fa)
continue;
if(tr[x].dp>tr[y].dp)
std::swap(x,y);
unin(,n,root[i],root[i-],tr[x].fa,tr[y].fa);
if(tr[x].dp==tr[y].dp)
grow(,n,tr[y].fa,root[i]);
}else if(cmd==)
{
int x;
scanf("%d",&x);
x=x^lastans;
root[i]=root[x];
}else{
int x,y;
scanf("%d%d",&x,&y);
x=x^lastans;
y=y^lastans;
x=finf(root[i],x);
y=finf(root[i],y);
if(tr[x].fa==tr[y].fa)
lastans=;
else
lastans=;
printf("%d\n",lastans);
}
}
return ;
}
BZOJ3674可持久化并查集(模板)的更多相关文章
- 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数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- bzoj3673 bzoj3674可持久化并查集
并查集都写不来了qwq 之前写的是错的 sz的初值都是0,这样怎么加就都是0了,水这道题还是可以,但是加强版就过不了了 #include<cstdio> #include<cstri ...
- [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky
思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...
- BZOJ3674 可持久化并查集加强版 可持久化 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...
- 【可持久化数组】【rope】bzoj3673 bzoj3674 可持久化并查集 by zky
rope教程:http://blog.csdn.net/iamzky/article/details/38348653 Code(bzoj3673): #include<cstdio> # ...
- BZOJ 3674: 可持久化并查集模板
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <strin ...
随机推荐
- C#文件拖放至窗口的ListView控件获取文件类型
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- ios系统提示音的使用(不是铃声)
AudioServices Jump to: navigation, search AudioServices is a group of C functions in AudioToolbox fo ...
- ORA-01555错误总结(二)
这篇文章紧接着上一篇"ORA-01555错误总结(一)".主要描写叙述延迟块清除导致的ORA-01555错误. 以下是一些简介(上一遍已经介绍过) ORA-01555错误是一种在o ...
- windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)
郑重申明:如需转载本博客,请注明出处,谢谢! 这几天在学习android NDK的开发.那么首先让我们来看看android NDK开发的本质是什么. NDK(Native Development Ki ...
- Android设计模式(十二)--抽象工厂模式
问题: 抽象工厂模式,是一个,狠恶心的模式,那么这个模式在Android有没实用到过呢? 1.定义: 抽象工厂模式:为创建一组相关或者是相互依赖的对象提供一个接口,而不须要指定他们的详细类. 2.使用 ...
- 设计兼容不同的屏幕尺寸的Android界面
Android的屏幕类型有几百种不同的尺寸,从小型的手机到大型的电视机.因此要使我们的应用程序兼容不同屏幕尺寸,才可以让我们的应用提供给更多的用户使用. 一.支持不同的屏幕尺寸 1.使用"w ...
- Linux系统安全加固(一)
Linux系统安全加固(一) 去年8月,某所网站遭黑客攻击瘫痪虽然港交所随后及时启用备用系统,但还是致使7支股票1支债卷被迫停牌,次日再次遭受攻击而瘫痪:在去年年底继CSDN信息安全出现之后, ...
- 利用Python网络爬虫抓取微信好友的签名及其可视化展示
前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
1456. [UVa 10881,Piotr's Ants]蚂蚁 ★ 输入文件:Ants.in 输出文件:Ants.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
- 文件/文件夹权限设置命令chmod的具体使用方法
chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它othe ...