LCA 祖孙询问

 树上倍增

1. 链式前向星建树

2. bfs 预处理倍增数据,fa[i][k],向上走$2^{k-1}$步所到达的位置(设置哨兵,放置越界)

3. lca两步:(1)跳到同一层 ()一起向上跳,跳到共同祖先节点的前一层,返回结果。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 40010, M=N*2;int n,m;
int h[N],e[M],ne[M],idx=0;
int depth[N], fa[N][16]; // LCA paramter 
int q[N]; void add(int a,int b){e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}void bfs(int root){memset(depth, 0x3f, sizeof depth);depth[0]=0, depth[root]=1; // depth[0] LCA哨兵int hh = 0, tt =0;q[0] = root;while(hh<=tt){int t = q[hh++];for(int i=h[t];~i;i=ne[i]){int j = e[i];if(depth[j]>depth[t]+1){depth[j] = depth[t]+1;q[++tt] = j;fa[j][0]=t;for(int k=1;k<=15;k++){fa[j][k] = fa[fa[j][k-1]][k-1];}}}} 
}int lca(int a,int b){if(depth[a]<depth[b]) swap(a,b); //a的深度要大于b for(int k=15;k>=0;k--)if(depth[fa[a][k]]>=depth[b]){a=fa[a][k];}if(a==b){return a;}for(int k=15;k>=0;k--){if(fa[a][k]!=fa[b][k]){ // 这里要差一步 a=fa[a][k];b=fa[b][k];}}return fa[a][0]; // 这里补上一步 
}int main(){scanf("%d", &n);int root = 0 ;memset(h,-1,sizeof h);for(int i=0;i<n;i++){int a,b;scanf("%d%d",&a,&b);if(b==-1)root = a;else add(a,b), add(b,a);}bfs(root);scanf("%d",&m);while(m--){int a,b;scanf("%d%d",&a,&b);int p = lca(a,b);if(p==a) puts("1");else if(p==b) puts("2");else puts("0");}return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程…

【提纲挈领】学会提问题,你就是那个年薪百万元的提示词工程师!LLM时代,如何提问题成为关键技能!多图说明!

【提纲挈领】学会提问题&#xff0c;你就是那个年薪百万元的提示词工程师&#xff01;LLM时代&#xff0c;如何提问题成为关键技能&#xff01;多图说明&#xff01; 一、会提问题的重要性二、提示词工程师三、如何提问3.1 提示词框架——BROKE原则3.1.1 打个比方3.1.2 举个实例…

品牌发言稿怎么写?媒介盒子分享

品牌发言稿的重要性不言而喻&#xff0c;它不仅代表着品牌形象&#xff0c;更是沟通品牌与消费者、合作伙伴的桥梁。如何撰写一篇高质量的品牌发言稿&#xff0c;成为许多品牌关注的焦点。今天媒介盒子来和大家聊聊&#xff1a;品牌发言稿怎么写。 一、 发言稿写作技巧 1.结构…

静音检测电路芯片D3703F——工 作 电 压 范 围 宽 : 3.2V ~ 16.0V,可以用于汽 车 音 响 系 统

概 述 &#xff1a; D3703F 是 一 块 汽 车 音 响 静 音 检 测 电 路 。 用 于 音 响 系 统 检 测 在 放 音 或 快 进 / 退 时 进 行 静 音 检 测 。 D3703F 的 的 电 压 范 围 &#xff1a; 3.2V &#xff5e; 16V &#xff0c; 信 号 检 测 和 静 音 时 间 可 通 过 外 围…

机器学习——模型融合:Boosting算法

机器学习——模型融合&#xff1a;Boosting算法 1. Boosting核心思想 Boosting算法是一种集成学习方法&#xff0c;其核心思想是通过组合多个弱学习器&#xff08;即准确率略高于随机猜测的学习器&#xff09;来构建一个强学习器&#xff08;即准确率较高的学习器&#xff09…

URI和URL的区别与联系

URI&#xff08;Uniform Resource Identifier&#xff09;和URL&#xff08;Uniform Resource Locator&#xff09;在Web技术中都有着重要的应用&#xff0c;它们都是用于标识和定位互联网上的资源&#xff0c;但存在一些关键的区别。 URL&#xff0c;即统一资源定位符&#x…

【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第五篇&#xff1a;Java面向对象编程&#xff1a;类、对象、继承、多态。 在Java中&#xff0c;面向对象编程是一种常用的编程范式&#xff0c;它以类和对象为核心&#xff0c;通过继承和多态等机制实现代码的复用和灵活…

万字长文!全网最详细的HarmonyOSNext星河版快速上手教程,小白看这个就够了!(下载安装DevEco Studio)

本节课将学习HarmonyOS应用开发领域&#xff0c;我们将逐步学习通过DeEco Studio开发工具创建并运行一个Hello World的工程。&#xff08;并在文末给出章节练习题供大家巩固掌握&#xff09; 阅读完本文&#xff0c;你将掌握以下内容。 01.下载与安装DevEco Studio/02.配置环…

linux环境openfile限制

/etc/security/limits.conf 是 Linux 系统中用于设置用户资源限制的配置文件。这个文件允许系统管理员为每个用户或用户组设置各种资源限制&#xff0c;以防止用户滥用系统资源。 这个文件中的每一行都定义了一个资源限制。每一行通常包含以下字段&#xff08;由空格或冒号分隔…

数据库相关知识

超键、候选键、主键、外键 超键&#xff08;Superkey&#xff09;&#xff1a;假设我们有一个学生信息表&#xff0c;其中包含学生ID、姓名和手机号码等信息。在这个表中&#xff0c;{学生ID} 和 {姓名, 手机号码} 都可以作为超键&#xff0c;因为它们都能唯一标识每个学生的信…

《C语言深度解剖》(3):探索函数递归、传值、传址调用的奥秘

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…

Centos中一些有趣的命令

目录 1.sl 小火车 2. cowsay 会说话的牛 3.toilet/figlet 图形化输出 4.aafire 小火焰 5.linux_logo 显示系统logo 1.sl 小火车 yum install sl 2. cowsay 会说话的牛 yum install cowsay 3.toilet/figlet 图形化输出 yum install toilet yum install figlet 4.aafire 小火…

兮兮牧场养殖小游戏积分兑换互动商城引流模式

刚注册的新会员必须要进入牧场才能激活所有功能 一、获得动物的途径的方式 第一种是邀请好友注册获得&#xff0c;第二种是看广告获得 邀诘好友注册获得动物明细: 1、从兮兮牧场的邀请好友的链接去邀请好友才能获得&#xff0c;其他邀请码无效 2、注册赠送小鸡一只; 3、邀…

【2024最新博客美化教程重置版】一分钟教会你在博客页面中加入javascript点击出弹出文字效果!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 我们可以在博客…

我是如何让chatgpt给我打零工的

背景 https://www.moobc.cn/ 网页如图所示。是一个个人练手的网站。使用chatgpt来进行网站分析优化&#xff0c;本文阅读大约需要10分钟。 分析 js代码及chat分析 首先&#xff0c;让我们从整体架构开始分析这个名为 "moobc" 的网站的前端 JavaScript 代码。这段…

C++感受4-HelloWorld中文版——认识编码

及时了解“编码”对编写代码的影响&#xff0c;是中国程序员越早知道越好的知识点。 一分钟了解什么叫“编码”和“解码”&#xff1b;通过实际演示&#xff0c;充分理解中文Windows下&#xff0c;C源代码编码需要注意的地方&#xff1b;通过 -finput-charsetutf8 等 g 编译配置…

洛谷-P1036 [NOIP2002 普及组] 选数

P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N30; int n,r; int g[N]; //存用户输入的数 int arr[N]; //存答案 int res0; //存种类数bool is_prime(int y){ //求素数if(y<2){…

Kubernetes(k8s):Pod 的 Node Selector详解

Kubernetes&#xff08;k8s&#xff09;&#xff1a;Pod 的 Node Selector详解 1、什么是Node Selector&#xff1f;2、Node Selector的工作原理3、Node Selector的用法1、例如&#xff1a;给node01 、node02 分别打上标签2、使用标签调度Pod3、删除节点的标签 &#x1f496;Th…

2024年会计、审计、财务与经济管理国际会议(ICAAFEM2024)

2024年会计、审计、财务与经济管理国际会议&#xff08;ICAAFEM2024&#xff09; 会议简介 2024年国际会计、审计、财务和经济管理会议&#xff08;ICAAFEM2024&#xff09;将在云南省昆明市举行。会议旨在为从事“会计、审计、财务、经济管理”研究的专家学者提供一个平台&am…

2023年上半年信息系统项目管理师——案例分析真题与答案解释

2023年上半年信息系统项目管理师——案例分析真题与答案解释 The Miracle of Love爱的奇迹 A college professor had his sociology class go into slums to get case histories of 200 young boys.一位大学教授让他的社会学课进入贫民窟&#xff0c;获取200名年轻男孩的案例。…