BZOJ-3674 可持久化并查集加强版 (主席树+并查集按秩合并)

直方图均衡化原理及matlab和opencv实现代码 详细分析了直方图均衡化的数学原理,配有matlab和opencv实现代码 阅读详情

题目链接
题解:
主席树维护并查集的 father 数组以及它的历史状态。
我觉得比较难搞得是按秩合并,我看网上其他人的代码觉得合并的好奇怪,然后我按照自己的想法合并觉得更奇怪,但是最奇怪的是它竟然过了!我怀疑是不是数据水了,然后去 洛谷 和 acwing 交了一下,竟然都过了!
这里由于按秩合并优化是不影响答案的正确性的,所以我合并部分的正确与否先保留。(因为我合并时会将以前的版本中的节点的秩改变)
代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#define PI acos(-1.0)
#define INF 0x3f3f3f3f3f3f3f3f
#define P pair<ll, int>
#define debug(x) cout << (#x) << ": " << (x) << " "
#define fastio ios::sync_with_stdio(false), cin.tie(0)
const int mod = 1e9 + 7;
const int M = 1000000 + 10;
const int N = 200000 + 10;

int n, m;
struct node { int ls, rs, f, dep; } tree[N<<5];
int rt[N], cnt;

void build(int &now, int l = 1, int r = n)
{
    now = ++cnt;
    if(l == r) {
        tree[now].f = l;
        tree[now].dep = 1;
        return ;
    }
    int mid = (l + r) >> 1;
    build(tree[now].ls, l, mid);
    build(tree[now].rs, mid + 1, r);
}

int query_id(int now, int pos, int l = 1, int r = n)
{
    if(l == r) return now;
    int mid = (l + r) >> 1;
    if(pos <= mid) return query_id(tree[now].ls, pos, l, mid);
    return query_id(tree[now].rs, pos, mid + 1, r);
}

int finds(int i, int x)
{
    int id = query_id(rt[i], x);
    if(tree[id].f == x) return id;
    return finds(i, tree[id].f);
}

void update(int &now, int pre, int a, int b, int l = 1, int r = n)
{
    now = ++cnt;
    if(l == r) {
        tree[now].f = b;
        tree[now].dep = tree[pre].dep;
        return ;
    }
    tree[now].ls = tree[pre].ls, tree[now].rs = tree[pre].rs;
    int mid = (l + r) >> 1;
    if(a <= mid) update(tree[now].ls, tree[pre].ls, a, b, l, mid);
    else update(tree[now].rs, tree[pre].rs, a, b, mid + 1, r);
}

void update_dep(int now, int b, int a_dep, int l = 1, int r = n)
{
    if(l == r) {
        tree[now].dep = max(a_dep + 1, tree[now].dep);
        return ;
    }
    int mid = (l + r) >> 1;
    if(b <= mid) update_dep(tree[now].ls, b, a_dep, l, mid);
    else update_dep(tree[now].rs, b, a_dep, mid + 1, r);
}

void unions(int i, int a, int b)
{
    int id_ra = finds(i - 1, a), id_rb = finds(i - 1, b);
    if(tree[id_ra].dep > tree[id_rb].dep) swap(id_ra, id_rb);
    update(rt[i], rt[i - 1], tree[id_ra].f, tree[id_rb].f);
    update_dep(rt[i], tree[id_rb].f, tree[id_ra].dep);
}

signed main()
{
    scanf("%d %d", &n, &m);
    build(rt[0]);
    int op, a, b, k;
    for(int i = 1; i <= m; i ++) {
        scanf("%d", &op);
        if(op == 1) {
            scanf("%d %d", &a, &b);
            unions(i, a, b);
        } else if(op == 2) {
            scanf("%d", &k);
            rt[i] = rt[k];
        } else {
            rt[i] = rt[i - 1];
            scanf("%d %d", &a, &b);
            int id_ra = finds(i, a), id_rb = finds(i, b);
            if(tree[id_ra].f != tree[id_rb].f) printf("0\n");
            else printf("1\n");
        }
    }
    return 0;
}

/*

  Rejoicing in hope, patient in tribulation .

*/

VMware Horizon 8 2111 部署系列(九)创建即时克隆桌面池 即时克隆桌面池是在 vCenter Server 中使用 vmFork 技术(称为即时克隆 API)从最佳配置映像创建的自动桌面池。即时克隆共享同一个基础映像虚拟机,使用基础映像虚拟机的快照创建的,它使用的存储空间也少于完整虚拟机。 即时克隆始终保持开机状态,并在注销后从当前发布的映像重新创建。... 阅读详情

相关推荐

Vcenter虚拟机磁盘转换实战:如何用StarWind V2V将vmdk转为qcow2(附空间优化技巧)

本文详细介绍了如何使用StarWind V2V Converter将Vcenter中的vmdk虚拟机磁盘高效转换为qcow2格式,并提供了空间优化技巧。从准备工作、导出vmdk文件到转换过程中的性能调优,帮助管理员在迁移虚拟机时减少资源消耗,确保数据完整性和性能。

dell8的博客 202

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

bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集。 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以使合并均摊复杂度为O(nlog2n)。可持久化线段树实际上就是在更新节点时按主席树的插入方式新建一条路径(其实主席树就是可持久化权值线段树)。 代码: 1 #include...

anheku1562的博客 189

【屠龙之术】SAP 欧洲公司 高级合规性报表 FEC

所谓FEC ,其实是法国税务局要求法国的公司,每年要向税务局进行提交的税务报告,这个报告有特殊的格式,进行加密,法国公司要在收到税务局通知以后,及时进行报送,如果不报送,或者报送不合格文件,将面临5000欧的罚款。-----------------------------------------------进入正文----------------------------------------------------------------------有专门的T-code,PPT我就不贴了,我直接截图。

竹大的博客 1955

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

传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性。 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩。 可以考虑另外一种优化方式:按秩合并貌似直接瞎合并也能过 于是主席树再额外维护一个该节点的秩即可。 代码: #include&lt;bits/stdc++.h&gt; #define ri register int...

苟为蒟蒻又何妨 364

从零理解Brep:用Python玩转3D建模的边界表示法(附OpenCASCADE示例)

本文深入解析了边界表示法(Brep)在3D建模中的应用,通过Python和OpenCASCADE的实战示例,详细介绍了Brep的核心数据结构、布尔运算、网格转换及3D打印优化技巧。适合CAD设计、3D打印和计算机图形学领域的开发者学习与实践。

n4o5p6q7r的博客 425

从信号到振镜:STM32F103 + XY2-100协议 + AM26LS31芯片的激光打标/雕刻系统信号链搭建指南

本文详细介绍了基于STM32F103微控制器和XY2-100协议的激光打标/雕刻系统信号链搭建方法。从数字振镜控制协议解析、AM26LS31差分驱动电路设计到信号完整性优化,提供了一套完整的解决方案,帮助工程师实现高精度激光控制系统的开发与调试。

weixin_42536058的博客 235

BZOJ 3673 & 3674 可持久化并查集 - 主席树(可持久化数组)

大概就是维护一个关于fa的可持久化数组,发现中间的节点好浪费啊233,但是好像也没有其他办法了。 注意最好不要写路径压缩,不但麻烦,而且慢。 还有就是BZOJ3674那个记录lt,rt值会MLE,以后还是函数中直接控制范围为妙啊哈哈 BZOJ 3673 #include #include #include #include #include using namespace st

x_1023的博客 341

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1721

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

浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 因为要支持历史操作,所以我们用可持久化线段树来维护并查集的祖先数组。 因为要路径压缩,所以每个点会被建\(k*logn\)次,\(k\)未知,但是绝对不大。 时间复杂度...

aga28832的博客 178

基于DWA算法的机器人动态避障技术实现及matlab代码

DWA算法是一种基于轨迹的运动规划算法,其核心思想是:在机器人当前位置及速度的基础上,结合机器人感知到的环境信息,生成一组合法的速度指令,然后从这组速度指令中选取代价最小的速度指令作为机器人的下一步操作。下面,我们将通过一个实例来演示基于DWA算法的机器人动态避障技术实现。假设机器人在一个宽敞的场地内行驶,但场地内有一些固定障碍物和移动障碍物,机器人需要避开这些障碍物,并在场地内自由移动。本文给出了一种基于DWA算法的机器人动态避障技术实现及相应的matlab代码,读者可以根据自身需求进行修改和调整。

uote_e的博客 1001

利用R语言通过holtwinters模型进行预测

使用Holt-Winters模型进行预测的第一步是对模型进行拟合。该函数需要两个参数:您的时间序列数据和一个“seasonal”参数,该参数指示您的数据的周期性(例如,如果您的数据按月记录,则应将“seasonal”参数设置为12,因为一年有12个月)。拟合模型后,您可以使用“forecast()”函数进行预测。该函数需要两个参数:您的拟合模型以及您要进行预测的时间段的长度。要使用Holt-Winters模型,您需要安装并加载“forecast”包。以下是进行Holt-Winters模型预测的示例代码。

Mrrunsen的博客 1696

[bzoj3674/3673]可持久化并查集加强版 主席树

3674: 可持久化并查集加强版 Time Limit: 15 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description Description: 自从zkysb出了可持久化并查集后…… hzwer:乱写能AC,暴力踩标程 KuribohG:我不路径压缩就过了! ndsf:暴力就可以轻松虐! zky:……

Unlimited Code Works 277

使用OpenCV从低对比度图像中提取圆形轮廓

希望本文能帮助您从低对比度图像中提取圆形轮在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。

ByteWhiz的博客 349

BZOJ3674 可持久化并查集【主席树+并查集】

BZOJ SOL 可持久化并查集?难道可持久化非旋treap维护并查集森林?其实没那么麻烦。。可以看做是主席树的应用。 从代码的角度思考并查集,我们只需要可持久化 fafafa数组即可。 这里不进行路径压缩(版本太多,感觉压缩了实测效果也不是那么理想) 所以要按秩合并,再用主席树维护一个depdepdep数组即可。 CODE /*********************************...

Jun 200

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

BZOJ3673&BZOJ3674 可持久化并查集及加强版

Description 自从zkysb出了可持久化并查集后…… hzwer:乱写能AC,暴力踩标程 KuribohG:我不路径压缩就过了! ndsf:暴力就可以轻松虐! zky:…… n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 请注意本题采用强制在线,

bblss123的博客 517

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

bzoj 3674: 可持久化并查集加强版

bzoj 3674: 可持久化并查集加强版 Description: 自从zkysb出了可持久化并查集后…… hzwer:乱写能AC,暴力踩标程 KuribohG:我不路径压缩就过了! ndsf:暴力就可以轻松虐! zky:…… n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一

maxtir的博客 325

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

bzoj3674 可持久化并查集加强版 (主席树 & 并查集)

bzoj3674 可持久化并查集加强版 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3674题意: n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 请注意本题采用强制在线,所给的a,b,k均经过加密,加密

Bfk的博客 474

BZOJ3674 可持久化并查集加强版

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,...

dgoh41514的博客 111

BZOJ 3674 主席树+并查集

/* BZOJ 3674: 可持久化并查集加强版 主席树+并查集 */ #include #include #define m (l+r)/2 using namespace std; const int N = 200100; const int M = N * 60; int n,q,tot; int fa[M],dp[M],T[N*4],lson[M],rson[

legedexinshi的专栏 505

[BZOJ3674]可持久化并查集

[BZOJ3674]可持久化并查集 BZOJ强制在线 BZOJ不强制在线 luogu 博主以为自己学会主席树之后来看这题整个人都是木的(学艺不精) 现在终于敢来写一写了 考虑并查集按大小合并 为了实现可持久化 主席树维护sz和fa就行 版本与版本之间的处理需要注意一下 下面放的是强制在线的code #include<bits/stdc++.h> using namespace...

223

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

传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性。 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩。 可以考虑另外一种优化方式:按秩合并貌似直接瞎合并也能过 于是主席树再额外维护一个该节点的秩即可。 代码: #include<bits/stdc++.h>...

weixin_30401605的博客 176

蓝书(算法竞赛进阶指南)刷题记录——BZOJ3674可持久化并查集加强版题解(启发式合并+并查集+主席树)

题目:BZOJ3674. 题目大意:给定nnn个集合和mmm个操作,要求支持: 1.格式1&ThinSpace;a&ThinSpace;b1\,a\,b1ab,表示合并a,ba,ba,b所在的集合. 2.格式2&ThinSpace;k2\,k2k,回到第kkk次操作之后的状态. 3.格式3&ThinSpace;a&ThinSpace;b3\,a\,b3ab,...

hzk_cpp的博客 176

【BZOJ3674】可持久化并查集加强版 (可持久化并查集裸题)

&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;又到暑假了,颓了好些天的蒟蒻决定再次开始写博客了。由于本蒟蒻太弱了,连NOI都没资格参加,只好在家里看NOI的同步赛题呜呜呜~。第一题一看就是可持久化并查集裸题,可是蒟蒻没写过。。。所以决定先写道裸题练练手(顺便存板子)。 &amp;amp;nbsp

蒟 590

bzoj 3674(可持久化并查集)

传送门 题解:一道可持久化并查集的裸题,板子子对了就能过; 可持久化并查集是基于主席数的一种结构,可持久化并查集要求能够访问历史版本,跟主席树很像,所以可以通过主席树维护普通并查集的fa数组,但是由于用主席树维护后没有办法用路径压缩,所以需要采用新的合并方式——启发式合并,对每一个节点增加一个level,每次合并从小的指向大的,如果合并的两个节点的level相等,则合并后的节点的level需要...

qq_40584551的博客 250

【BZOJ3674】—可持久化并查集加强版(可持久化并查集)

传送门 我还以为可持久化并查集是什么呢 可持久化并查集===可持久化+++并查集===主席树+++并查集 考虑到每次状态只会修改一个集合 于是就想可持久化数组一样 维护一颗主席树来维护每个点的fafafa #include<bits/stdc++.h> using namespace std; #define gc getchar #de...

weixin_30590285的博客 167

BZOJ3673,3694:可持久化并查集(Rope/主席树)

BZOJ3673 BZOJ3674用可持续化数据结构维护祖先。注意的是路径压缩的复杂度是错的,要写按秩合并。写BZOJ3673时: Rope真好用啊!!又是一道1KB题目。写BZOJ3674时: 沃日怎么一直RE?? 要了数据,跑了20s,果然O(nn√logn)O(n\sqrt{n}\log n)的复杂度水不过去。然而没有卡路径压缩,改成路径压缩之后过了。写了主席树0.1s过。。以后还是主

DZYO的博客 559
上一篇: HDU6704 CCPC网络赛 K-th occurrence (后缀数组 + ST表 + 主席树)
下一篇: 2019南京网络赛 D. Robots(概率DP与拓扑排序)
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值