当前位置: 首页 > news >正文

倍增并查集

更新日志 2025/11/24:开工。

概念

类似于两个区间内,各个位置一一对应连边的问题,就可以考虑使用倍增并查集解决。比如说,QOJ9904。

思路

以例题为例,转化后就是相当于给一个区间每对左起第 \(i\) 个和右起第 \(i\) 个连边。我们令 \(a(x,t)\) 表示 \(x\) 处往右 \(2^t\) 的区间,令 \(a(x+n,t)\) 表示 \(x\) 处往左 \(2^t\) 的区间。初始时,在并查集上合并所有 \(a(x,0)\)\(a(x+n,0)\)

考虑两个区间一一连边,我们将原区间拆成 \(\log\) 个整次区间,然后对每个整次区间连边。

假如我们当前要给 \([l,l+2^t-1]\)\([r-2^t+1,r]\) 连边:

  • \(a(l,t)\)\(a(r+n,t)\) 已连通,那么直接返回即可。
  • 否则,先连接 \(a(l,t)\)\(a(r+n,t)\),然后递归处理 \((l,r,t-1)\)\((l+2^{t-1},r-2^{t-1},t-1)\)
  • 特殊地,若 \(t=0\) 且尚未连通,那么就是说这里要连一条边了,连接后直接返回即可。

这样一共 \(\log\) 层,每层 \(O(n)\) 个节点,复杂度为 \(O(n\log n)\)

例题

QOJ9904,从小到大枚举 \(a_i\),然后不难得到对应连边区间,我们想要知道当前区间内要连多少条边,倍增并查集即可,每次返回 \(t=0\) 且尚未连通的个数。

code
const int N=4e5+5,T=19;int n;
ll a[N];int fa[N*T];
int find(int x){if(fa[x]!=x)fa[x]=find(fa[x]);return fa[x];}
void merge(int a,int b){fa[find(a)]=find(b);}
bool same(int a,int b){return find(a)==find(b);}
int id[N][T],idx,per[N];
ll ans;int Merge(int l,int r,int t){if(same(id[l][t],id[r+n][t]))return 0;merge(id[l][t],id[r+n][t]);if(!t)return 1;return Merge(l,r,t-1)+Merge(l+(1<<t-1),r-(1<<t-1),t-1);
}inline void Main(){cin>>n;rep(i,3,2*n-1)cin>>a[i],per[i-2]=i;repl(t,0,T)rep(i,1,n<<1)id[i][t]=++idx,fa[idx]=idx;rep(i,1,n)merge(id[i][0],id[i+n][0]);sort(per+1,per+2*n-2,[&](int x,int y){return a[x]<a[y];});rep(I,1,2*n-3){int i=per[I];int l=max(1,i-n),r=min(n,i-1);per(t,T-1,0)if(l+(1<<t)-1<r-(1<<t)+1)ans+=a[i]*Merge(l,r,t),l+=1<<t,r-=1<<t;}put(ans);
}
http://www.gsyq.cn/news/58733.html

相关文章:

  • 小企业OKR实施的组织变革与本土化路径
  • 二、使用Spring AI实现简单聊天功能(实现角色预设、流式和非流式响应)
  • 安装一个为RK3588S优化的、启用了OpenCL (GPU加速) 和 NEON (CPU加速) 的OpenCV 4.10版本。
  • 递归算法如何分析复杂度?
  • 2025南昌留学机构哪家好
  • 2025广州哪里有好的留学机构
  • FTP传输工具推荐:2025年政企首选的国产文件传输解决方案
  • 2025 拍立得电池怎么选?按场景选对不浪费!四大核心场景 + 十大品牌推荐,适配多机型
  • 数据库索引重组与重建 - ufo233
  • P1024 一三元次方程
  • 2025北京有多少家留学机构啊
  • 2025 年 11 月毛刷辊厂家权威推荐榜:工业/定做/清洁/纺织/钢制毛刷辊,耐磨高效与深度清洁的匠心之选
  • 2025 年 11 月合肥搬家公司权威推荐榜:专业团队与贴心服务,覆盖包河区、蜀山区等全市范围,高效省心搬家首选
  • Dexie.js 使用教程
  • 2025深圳美国留学机构排名前十
  • Web 常见名词解释
  • 2025年山东连栋玻璃温室公司权威推荐榜单:玻璃智能温室/玻璃连栋温室/玻璃温室设计源头公司精选
  • AI SDK:重新定义 AI 应用开发
  • 20232410 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 主流开源JS地图框架选择
  • PHP 8.5 在性能、调试和运维方面的新特性
  • 完整教程:2025年接单经验和软件外包平台一览
  • 2025年最新国际货运代理公司实力推荐榜:全链路服务力到行业口碑深度评估
  • 完整教程:AI超级智能体项目中的多模型集成实践:挑战、架构与代码详解
  • 【URP】Unity[相机]渲染类型
  • 20251028在荣品RD-RK3588-MID开发板的Android13系统下解决关机的时候最近打开的应用不关的难题
  • 实验4 NoSQL和关系数据库的操作比较
  • 构建卓越开发者体验的核心原则
  • 上周热点回顾(11.17
  • 详细介绍:MySQL-8.0.43 免安装版保姆教程