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

算法竞赛备考冲刺必刷题(C++) | 洛谷 P3379 【模板】最近公共祖先(LCA)

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:P3379 【模板】最近公共祖先(LCA) - 洛谷

【题目描述】

如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。

【输入】

第一行包含三个正整数N , M , S N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。

接下来N − 1 N-1N1行每行包含两个正整数x , y x, yx,y,表示x xx结点和y yy结点之间有一条直接连接的边(数据保证可以构成树)。

接下来M MM行每行包含两个正整数a , b a, ba,b,表示询问a aa结点和b bb结点的最近公共祖先。

【输出】

输出包含M MM行,每行包含一个正整数,依次为每一个询问的结果。

【输入样例】

5 5 4 3 1 2 4 5 1 1 4 2 4 3 2 3 5 1 2 4 5

【输出样例】

4 4 1 4 4

【算法标签】

《洛谷 P3379 最近公共祖先(LCA)》 #最近公共祖先LCA# #模板题# #O2优化#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=500005;intn,m,s,a,b;// n: 节点数,m: 查询数,s: 根节点vector<int>e[N];// 邻接表存储树intdep[N];// 节点的深度intfa[N][20];// 倍增祖先表,fa[u][i]表示u的2^i级祖先// 深度优先搜索,预处理深度和祖先表voiddfs(intu,intfather){// 计算当前节点的深度dep[u]=dep[father]+1;// 初始化直接父节点fa[u][0]=father;// 预处理倍增祖先表for(inti=1;i<=19;i++)fa[u][i]=fa[fa[u][i-1]][i-1];// 遍历子节点for(intv:e[u])if(v!=father)// 避免走回父节点dfs(v,u);}// 求两个节点的最近公共祖先intlca(intu,intv){// 第一步:将u和v调整到同一深度if(dep[u]<dep[v])swap(u,v);// 将u向上跳,直到与v同深度for(inti=19;i>=0;i--)if(dep[fa[u][i]]>=dep[v])u=fa[u][i];// 如果此时u==v,说明v是u的祖先if(u==v)returnv;// 第二步:u和v同时向上跳for(inti=19;i>=0;i--)if(fa[u][i]!=fa[v][i])// 如果祖先不同,就一起向上跳u=fa[u][i],v=fa[v][i];// 此时u和v的父节点就是LCAreturnfa[u][0];}intmain(){// 输入树的信息cin>>n>>m>>s;// 读入n-1条边for(inti=1;i<n;i++){intx,y;cin>>x>>y;e[x].push_back(y);e[y].push_back(x);}// 从根节点s开始DFS,预处理深度和祖先表dfs(s,0);// 处理m个查询for(inti=1;i<=m;i++){inta,b;cin>>a>>b;cout<<lca(a,b)<<endl;// 输出LCA}return0;}

【运行结果】

5 5 4 3 1 2 4 5 1 1 4 2 4 4 3 2 4 3 5 1 1 2 4 4 5 4
http://www.rkmt.cn/news/187895.html

相关文章:

  • RTMP推流平台EasyDSS无人机推流直播技术在交通视频监测场景的智能应用
  • 工业PLC数据采集难题,PHP如何实现高效解析与零延迟上传?
  • YOLOv8支持多语言界面吗?国际化进展通报
  • YOLOv8能否检测圆形物体?特殊形状适应性测试
  • 3D数字人骨骼觉醒:腾讯混元开源十亿参数3D人体动作生成新SOTA
  • YOLOv8 CUDA初始化失败?NVIDIA驱动检查清单
  • 年货零食囤货清单与新年礼包家庭装:旺旺大礼包以健康心意重塑春节消费 - 速递信息
  • 2025年液压/立式/全自动/卧式/废纸板打包机厂家实力推荐榜:技术领先与市场口碑双优之选 - 品牌推荐官
  • 企业微信 API 深度实战:外部群主动推送消息的“硬核”指南
  • 【PHP WebSocket优化终极指南】:掌握实时通信性能提升的5大核心技术
  • PHP实时数据处理架构设计(工业级稳定性保障方案)
  • 靠谱钢格栅制造厂哪家技术强、钢格栅生产厂选哪家好? - 工业推荐榜
  • 企业微信 API 深度实战:外部群消息主动推送的“避坑”逻辑与架构实现
  • 四十未立:再见2025启航2026
  • YOLOv8与传统CNN目标检测算法对比优势分析
  • Java程序员必看!大模型开发转型全攻略,收藏这份高薪跳板_程序员转行AI大模型教程(非常详细)
  • 上海市企业技术中心资质代办机构公司哪家好?2026年服务质量深度综合实力测评 - 速递信息
  • YOLOv8训练全流程解析:从数据准备到模型导出
  • Qt的第三方库 QXlsx 最常用的使用方法
  • 【路径规划】基于RRT、RRT-star和RRT-u算法算法实现机器人路径规划附matlab代码
  • js 实现 css 的 color-mix 函数
  • Expression表达式树深度优化,彻底解决C#自定义集合性能瓶颈
  • 一种三合一的UWB蓝牙LORA定位工卡介绍
  • 实验4 guochenghua
  • Java毕设项目推荐-基于SpringBoot的云南旅游攻略信息系统的设计与实现基于springboot云南省旅游信息平台设计与实现【附源码+文档,调试定制服务】
  • 为什么你的C#项目还没用上运行时拦截?跨平台适配的关键一步
  • Java毕设项目推荐-基于SpringBoot智慧自习室管理系统的设计与实现基于SpringBoot的自习室预约管理系统的设计与实现【附源码+文档,调试定制服务】
  • C#跨平台性能监控工具开发全解析(从零构建高精度监控系统)
  • Java毕设选题推荐:基于SpringBoot+Vue的农夫码头蔬菜销售网站管理系统设基于SpringBoot的农夫码头蔬菜销售网站的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【GitHub项目推荐--AI-Codereview-Gitlab:智能代码审查工具】⭐⭐⭐⭐⭐