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

算法提升之树上问题-(LCA)

今天学习的是关于LCA的相关问题,LCA是用来求解不同节点公共祖先的不错选择,同时我也会介绍关于倍增法求解LCA,通过倍增法可以让时间复杂度降低,类似于ST表的方式进行求解。

1.LCA的基本概念

2.倍增法求LCA

3.基本代码内容

问题描述

给定一棵有 N 个节点的树,每个节点有一个唯一的编号,从 1到 N。树的根节点是 1 号节点。接下来,你会得到 Q个查询。对于每个查询,你将得到两个节点的编号,你的任务是找到这两个节点的最低公共祖先。

输入格式

第一行包含一个整数 N,表示树的节点数。

接下来的 N−1行,每行包含两个整数 U 和 V,表示节点 U和节点 V之间有一条边。

下一行包含一个整数 QQ,表示查询的数量。

接下来的 Q行,每行包含两个整数 A 和 B,表示你需要找到节点 A和节点 B的最低公共祖先

输出格式

对于每个查询,输出一行,该行包含一个整数,表示两个节点的最近公共祖先。

输入案例:

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

输出案例:

2
1
1

代码部分:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
int n,dep[N],fa[N][21],q;
vector<int> g[N];
void dfs(int n,int p) {dep[n] = dep[p] + 1;fa[n][0] = p;for(int i = 1; i <= 20; i ++) fa[n][i] = fa[fa[n][i-1]][i-1];for(int x = 0; x < g[n].size(); x ++) {if(g[n][x] == p) continue;dfs(g[n][x],n);}
}
int lca(int x,int y) {if(dep[x] < dep[y]) swap(x,y);for(int i = 20; i >= 0; i --) if(dep[fa[x][i]] >= dep[y]) x = fa[x][i];if(x == y) return x;for(int i = 20; i >= 0; i --) if(fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];return fa[x][0];
}
int main() {cin>>n;for(int i = 1; i < n; i ++) {int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,1);cin>>q;while(q --) {int x,y;cin>>x>>y;cout<<lca(x,y)<<endl;}
}

这道题就是通过倍增LCA的方法求解不同字节点之间的公共节点,大家可以当作模版题去记忆,好了,今天的分享就到这里,希望对你能有所帮助。

http://www.dtcms.com/a/330682.html

相关文章:

  • vue3使用leaflet地图
  • **超融合架构中的发散创新:探索现代编程语言的挑战与机遇**一、引言随着数字化时代的快速发展,超融合架构已成为IT领域的一种重要趋势
  • 【入门级-算法-2、入门算法:枚举法】
  • 代码随想录Day50:图论(图论理论、深度搜索理论、所有可达路径、广度搜索理论)
  • 表单输入绑定详解
  • 给电脑升级内存,自检太慢,以为出错
  • FPS游戏时,你的电脑都在干什么(CS2)
  • langchain入门笔记03:使用fastapi部署本地大模型后端接口,优化局域网内的问答响应速度
  • 网页加载缓慢系统排查与优化指南
  • 消费级显卡分布式智能体协同:构建高性价比医疗AI互动智能体的理论与实践路径
  • npm介绍,指令合集,换源指令
  • 【大文件上传】分片上传+断点续传+Worker线程计算Hash
  • Bean的生命周期
  • (2-10-1)MyBatis的基础与基本使用
  • 【word】一次选中全部表格,宏方法
  • [工具]vscode 使用AI 优化代码
  • week1-[分支结构]中位数
  • AI技术产品化:核心认知与实战指南
  • 【深度学习计算性能】04:硬件
  • 集成电路学习:什么是Machine Learning机器学习
  • 云原生存储架构设计与性能优化
  • 自动驾驶轨迹规划算法——Apollo OpenSpace Planner
  • 利用GISBox完成超图S3M与OSGB三维模型格式的转换
  • Elasticsearch 中如何配置 RBAC 权限-实现安全的访问控制
  • 现在都是APP,小程序抢购,支持浏览器不支持 SSE
  • GPT-5 提示词优化全攻略:用 Prompt Optimizer 快速迁移与提升,打造更稳更快的智能应用
  • LeetCode——Hot 100【合并区间 最大子数组和】
  • 算法148. 排序链表
  • 希尔排序专栏
  • docker compose部署mysql