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

求LCA 倍增法

倍增法

在线算法,单独处理每个查询

DFS()——祖先递推O ( n l o g 2 n ) O(nlog_2n)O(nlog2n)

f a [ x ] [ i ] fa[x][i]fa[x][i]表示从x xx向上跳2 i 2^i2i步能到达的祖先
f a [ x ] [ i ] = f a [ f a [ x ] [ i − 1 ] ] [ i − 1 ] fa[x][i]=fa[fa[x][i-1]][i-1]fa[x][i]=fa[fa[x][i1]][i1]
右端:f a [ x ] [ i − 1 ] fa[x][i-1]fa[x][i1]=从x xx向上跳2 i − 1 2^{i-1}2i1步到达的点,从这个点再跳2 i − 1 2^{i-1}2i1能到达f a [ x ] [ i ] fa[x][i]fa[x][i]
利用二进制特征能跳到任意步的祖先

LCA()——同步上跳O ( m l o g 2 n ) O(mlog_2n)O(mlog2n)

基本思路

  • 把x\y提到相同深度
  • 让x\y同步向上走,每走一步判断是否相遇

例1:零食采购

摘自题解:
列表项第i种零食是否包含 = 起始节点买到第i种零食总数 + 终点买到第i种零食总数 - 公共祖先买到第i种零食总数 - 公共祖先上一个节点买到第i种零食总数

constintN=1e5+10,M=1050;constdoublePI=acos(-1);constlonglongmod=998244353,inf=1e18;intfa[N][25],dep[N];intc[N][25];// 分每种零食来统计 看这种零食能不能在路上买到 而不是直接统计种数vector<int>g[N];voiddfs(intnow,intf){forr(i,1,20)c[now][i]+=c[f][i];dep[now]=dep[f]+1;fa[now][0]=f;for(inti=1;(1<<i)<=dep[now];i++){fa[now][i]=fa[fa[now][i-1]][i-1];}for(autox:g[now]){if(x==f)continue;dfs(x,now);}}intlca(intx,inty){if(dep[x]<dep[y])swap(x,y);//x深 y浅//xy提到相同深度reforr(i,0,20){if(dep[fa[x][i]]>=dep[y])x=fa[x][i];//从大到小遍历 利用二进制特性 分解dep[x]-dep[y]}if(x==y)returnx;//xy同步上跳reforr(i,0,20){if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];//不是同一祖先就上跳 逐步逼近LCA//fa[x][i]=fa[y][i]时不变 因为会有更近的相同祖先}returnfa[x][0];}voidsolve(){intn,q;cin>>n>>q;forr(i,1,n){intcx;cin>>cx;c[i][cx]=1;}forr(i,1,n-1){intu,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0);// 以1为根forr(i,1,q){intans=0;ints,t;cin>>s>>t;intf=lca(s,t);forr(k,1,20){// 统计每种零食是否存在intcnt=c[s][k]+c[t][k]-c[f][k]-c[fa[f][0]][k];ans+=(cnt>0);}cout<<ans<<endl;}}
http://www.jsqmd.com/news/529304/

相关文章:

  • 精准匹配,高效提分:主治医师备考选哪个讲师? - 医考机构品牌测评专家
  • 【稀缺首发】工信部《工业边缘智能网关白皮书》未公开的Python实现范式:动态协议插件热加载、设备影子同步、断网续传原子性保障(含Gitee星标开源库链接)
  • 保姆级教程:在RK3588开发板上配置PCIe 3.0 x4控制器(RC/EP模式切换与实战避坑)
  • 实践三 网络嗅探与协议分析
  • 终极指南:3步实现滴答清单与Obsidian智能联动的完整解决方案
  • AIGlasses OS Pro Java面试题解析:视觉相关算法实现
  • Spring Boot + Lettuce实战:如何优雅解决RedisCommandTimeoutException超时问题(附完整配置代码)
  • Win11Debloat开源工具:系统性能优化的全方位解决方案
  • 收藏!小白程序员必看:PUA大模型,让AI高效工作的秘密武器
  • 主管护师听谁的课:为什么有的课越听越累,有的课越学越轻? - 医考机构品牌测评专家
  • Genome Biology | scKAN:连接单细胞数据分析与药物发现的可解释架构,Qwen3-Coder 实战:从 0 到 1 开发商业级 API 平台,过程开源!。
  • 效果展示:看yz-bijini-cosplay如何用CFG Scale 7.0雕琢出完美服装褶皱
  • RK3588S SDK编译全流程解析:从下载到镜像生成
  • 别再纠结2D还是3D了!用Live2D+Unity,从二次元立绘到会动的虚拟主播,保姆级教程带你搞定
  • Python 3.15新特性引爆点:3步启用PEP 684多解释器隔离,告别共享状态灾难
  • AI 辅助开发实战:高效完成毕业设计中的机器学习项目
  • 2026年海外打工如何选择可靠服务商?中外甄选专业解析 - 2026年企业推荐榜
  • 圣女司幼幽-造相Z-Turbo GPU算力适配实测:24G显存下batch_size与生成速度平衡点
  • Playnite:终极开源游戏库管理器,一站式管理所有游戏平台
  • ZIP压缩包怎么添加或删除文件?不用解压,直接增删的技巧来了
  • 零基础玩转雪女-斗罗大陆-造相Z-Turbo:手把手教你生成清冷绝美雪女
  • mmdetection实战:从混淆矩阵到精准评估,手把手计算P、R、F1
  • 小程序毕业设计基于微信小程序的官鹅沟智慧景点系统
  • 2026微信SVG动画零基础入门指南 公众号高效运营实操 - 鹅鹅鹅ee
  • Boss-Key深度评测:一键隐藏背后的隐私保护艺术
  • Qwen3-0.6B-FP8开源模型部署:魔搭社区模型本地化运行全流程
  • SGLang-v0.5.6优化升级:多GPU并行推理配置全解析
  • Nunchaku量化Qwen:极速AI图像编辑新体验
  • 2026年 移门厂家推荐排行榜:法式/折叠/阳台/厨房/隔音/窄边极简定制,匠心工艺与空间美学融合之选 - 品牌企业推荐师(官方)
  • MODBUS-TCP没你想的复杂!正运动控制器网口通讯5分钟快速配置指南