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

26 LCA模拟赛3T2 连边 题解

连边

题面

给定一张初始 \(n\) 个点,没有边的图。

给定 \(m\) 表示有 \(m\) 个时刻,第 \(i\) 个时刻会将 \(gcd(a,b) = m - i + 1\) 某些点连起来。

\(q\) 个询问,每次询问给定 \(x, y\),你需要回答 \(x, y\) 最早在什么时刻连通

\(1 \le n,q \le 10^5, 1 \le m \le n\)

题解

这个暴力思路就是直接模拟。

考虑优化,我们可以对原来加的边进行一个等价变形:每个时刻将 \(i\)\(i\) 的倍数连边,边权为 \(i\) ,连通性是一样的。

这样,边数最多只有 \(O(n \log n)\)

我们对这些边按照边权从小到大加入到图中,用并查集维护连通性,从而构造出一棵最小生成树。

然后直接倍增查询路径最大边权即为答案。

时间复杂度 \(O(n \log n)\)

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
#include <set>using namespace std;namespace michaele {const int N = 1e5 + 10, M = N << 1;int n, m, q;int h[N], ver[M], ne[M], e[M], tot;int anc[N], f[N][23], g[N][23], dep[N];void add (int x, int y, int z) {ver[ ++ tot] = y;ne[tot] = h[x];h[x] = tot;e[tot] = z;}int fin (int x) {return x == anc[x] ? x : anc[x] = fin (anc[x]);}void dfs (int x, int fa) {for (int i = h[x]; i; i = ne[i]) {int y = ver[i];if (y == fa) continue;f[y][0] = x;g[y][0] = e[i];dep[y] = dep[x] + 1;dfs (y, x);}}int query (int x, int y) {if (dep[x] < dep[y]) swap (x, y);int res = 1;for (int i = 20; i >= 0; i --) {if (dep[f[x][i]] >= dep[y]) {res = max (res, g[x][i]);x = f[x][i];}}if (x == y) return res;for (int i = 20; i >= 0; i --) {if (f[x][i] != f[y][i]) {res = max ({res, g[x][i], g[y][i]});x = f[x][i];y = f[y][i];}}res = max ({res, g[x][0], g[y][0]});return res;}void solve () {cin >> n >> m >> q;for (int i = 1; i <= n; i ++) anc[i] = i;for (int i = 1; i <= m; i ++) {int k = m - i + 1;for (int j = k * 2; j <= n; j += k) {int x = fin (k), y = fin (j);if (x != y) {anc[x] = y;add (k, j, i);add (j, k, i);}}}dep[1] = 1;dfs (1, 0);for (int j = 1; j <= 19; j ++) {for (int i = 1; i <= n; i ++) {if (!f[i][j - 1]) continue;f[i][j] = f[f[i][j - 1]][j - 1];g[i][j] = max (g[i][j - 1], g[f[i][j - 1]][j - 1]);}}for (int i = 1; i <= q; i ++) {int x, y;cin >> x >> y;if (x == y) {cout << 0 << endl;continue;}cout << query (x, y) << endl;}}
}int main () {ios :: sync_with_stdio (0);cin.tie (0);cout.tie (0);michaele :: solve ();return 0;
}
http://www.zskr.cn/news/22303.html

相关文章:

  • 28 S2模拟赛T2 开会council 题解
  • 实验记录2025/10/14
  • 2025年中央空调/锅炉房/机房运维服务厂家最新权威推荐榜:专业托管与维修外包一体化解决方案精选
  • 《Vue3 + Vite + Pinia 实现后台管理系统:路由权限控制与动态菜单渲染》
  • 性能测试进阶秘籍:如何用JMeter分布式压测挖掘系统极限潜
  • 2025 年废旧轮胎裂解加热生产厂家最新推荐榜单:优质企业专利技术、产能规模与口碑实力全景解析锂化工焚烧炉/氟化热风系统/煤化工热风炉厂家推荐
  • 日志 | 2025.10
  • 【ACM出版|EI检索稳定】2025年AI驱动下:业务转型和数据科学创新国际学术会议(ICBTDS 2025)
  • 2025 年厂房出售公司服务推荐排行榜:珠三角/广州/深圳/东莞/佛山/珠海等城市优质厂房出售公司全面测评解析
  • 构建智能视觉中枢:国标GB28181算法算力平台EasyGBS的全域感知与播放方案
  • 【2025-10-14】玩玩植物
  • 2025 木饰面源头厂家最新推荐榜单:21 年深耕企业领衔,背景墙 / 全屋 / 碳晶板 / 岩板全场景适配品牌解析
  • 读书笔记:Oracle LOB类型:大数据存储的终极指南
  • 2025 年铝塑板源头厂家最新推荐榜:聚焦气候适配与品质服务,西南及全国优质供应商精选,含门头 / 墙面 / 外墙等场景专款
  • 【2025-10-13】平凡父母
  • 【2025-10-15】农村自建房
  • 283.移动零
  • Mysql1064,最常见的语法错误
  • 泳池水检测仪厂家推荐,余氯检测仪哪个品牌好?COD水质/总氮/氨氮靠谱供应商
  • 2025年智能装备与机器人国际学术会议(IER 2025)
  • 盘点2025破碎仪厂家/提供研磨处理方案的厂家
  • Delphi TscGPPageControl动态创建新页面与加载Frame框架
  • 静态方法访问类的实例成员
  • 【Linux 系统】进程优先级 - 实践
  • What to do if your NFO files doesnt check to 100%?
  • 2598. 执行操作后的最大 MEX——模运算
  • pg_resetwal 使用简介 - 实践
  • 2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!
  • 2025 年碳纤维布厂家 TOP 企业品牌推荐排行榜,碳纤维布 / 建筑碳纤维布 / 加固碳纤维布 / 300 克碳纤维布 / 碳纤维加固布公司推荐!
  • fastjson转换json时,碰到的那些首字母大小写转换的坑