求树上任意两个点的距离lca

news2024/11/15 21:55:05

前言:一开始看到这个题目的时候,感觉就和lca有关,但是没有想到具体的公式

d = d e p [ x ] + d e p [ y ] − 2 ∗ d e p [ l c a ( x , y ) ] d = dep[x] + dep[y] - 2*dep[lca(x,y)] d=dep[x]+dep[y]2dep[lca(x,y)]

并且我们这个题目还是一个进阶版本的题,我们还会存在电缆,我们还有两种选择的可能,这也是要考虑在内的


题目地址

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
#define ll long long

const int N = (int)5e5;
int n;
int e[N * 2], ne[N * 2], h[N], idx = 0;
int px, py;
int dep[N], fa[N][20];

inline int read()
{
	int x = 0, f = 1;
	char c = getchar();
	while (c < '0' || c>'9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', c = getchar();
	return f * x;
}

void add(int a, int b) {
	e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}

void dfs(int u, int father) {
	dep[u] = dep[father] + 1;
	fa[u][0] = father;
	for (int i = 1; i < 20; i++) {
		fa[u][i] = fa[fa[u][i - 1]][i - 1];
	}
	for (int i = h[u]; i; i = ne[i]) {
		int to = e[i];
		if (to == father) continue;
		dfs(to, u);
	}
}

int lca(int u, int v) {
	if (dep[u] < dep[v]) swap(u, v);
	// 先跳到同一层
	for (int i = 19; i >= 0; i--) {
		if (dep[fa[u][i]] >= dep[v]) u = fa[u][i];
	}
	if (u == v) return u;
	for (int i = 19; i >= 0; i--) {
		if (fa[u][i] != fa[v][i]) {
			u = fa[u][i], v = fa[v][i];
		}
	}return fa[u][0];
}

int fun(int x, int y) {
	return dep[x] + dep[y] - 2 * dep[lca(x, y)];
}

int main() {
	cin >> n;
	for (int i = 1; i < n; i++) {
		int x, y; 
		//cin >> x >> y;
		x = read(); y = read();
		add(x, y), add(y, x);
	}
	cin >> px >> py;
	int q; cin >> q;
	dfs(1, 0);
	while (q--) {
		int x, y; 
		//cin >> x >> y;
		x = read(); y = read();
		int d = min({ fun(x,y),fun(x,px) + fun(y,py),fun(x,py) + fun(y,px) });
		//cout << d << endl;
		printf("%d\n", d);
	}return 0;
}

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

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

相关文章

[数据集][目标检测]烟叶病害检测数据集VOC+YOLO格式612张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;612 标注数量(xml文件个数)&#xff1a;612 标注数量(txt文件个数)&#xff1a;612 标注类别…

【重学 MySQL】二十六、内连接和外连接

【重学 MySQL】二十六、内连接和外连接 内连接&#xff08;INNER JOIN&#xff09;外连接&#xff08;OUTER JOIN&#xff09;总结 在MySQL中&#xff0c;内连接和外连接是两种常见的表连接方式&#xff0c;它们在处理多个表之间的关系时发挥着重要作用。 内连接&#xff08;I…

光器件 -- 拉曼放大器(原理、分类和应用)

拉曼工作原理 拉曼放大器基于受激拉曼散射效应&#xff08;SRS&#xff0c;Stimulated Raman Scattering&#xff09;&#xff0c;以传输光纤作为增益介质&#xff0c;将拉曼泵浦功率转移到C波段信号上进行放大。受激拉曼散射基本原理为&#xff1a;如果一个弱信号光与一个强泵…

流动性质押协议 Drop:DeFi 新一轮革新

近年来&#xff0c;去中心化金融&#xff08;DeFi&#xff09;领域经历了迅猛的增长和创新&#xff0c;而其中一项重要的发展便是流动性质押协议的兴起。在传统的区块链网络中&#xff0c;用户为了参与网络的验证过程和维护网络安全&#xff0c;通常需要将加密资产锁定在区块链…

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别&#xff1f;⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别&#xff1f;⭐️⭐️⭐️ArrayList 和 Vector 区别&#xff1f;⭐️⭐️ArrayList 的扩容机制&#xff1f;⭐️⭐️⭐️ Qu…

Lesson08---string类(3)

1.find_first_of string里面的find成员函数就是找一个字符串然后返回第一个字符 find_first_of函数看个例子就很快就能明白 它返回的下标是参数的其中任意一个字符的下标通过以上操作就可以把原来的那一整个字符串替换成自己想要的字符 第二个参数其实就是一个缺省参数默认从0…

多种传感器输出的模拟量转换

目录 内部温度传感器与参照电压 传感器 光敏电阻 热敏电阻 反射式红外 对射式红外 驱动代码 Sensor.h Sensor.c AD.h AD.c main.c 内部温度传感器与参照电压 STM32有一个内部的温度传感器&#xff0c;可以用来测量CPU及周围的温度。 该温度传感器在内部和ADCx_I…

IBM中国研发中心撤出:挑战与机遇并存

IBM中国研发中心撤出&#xff1a;挑战与机遇并存 引言 近日&#xff0c;IBM宣布撤出在中国的两大研发中心的消息&#xff0c;引起了广泛关注。这一举动不仅对IBM自身的全球布局产生了影响&#xff0c;也在一定程度上反映了跨国公司在中国市场策略的调整。本文将探讨这一事件背…

5.9 使用LBA 的模式来读取磁盘

注意&#xff1a; 如果再 cmake 中想要 make clean 的话&#xff0c; 直接 删除 build 目录就可以了。 1 也是说 是 MBR还是 LBA 硬盘是可以控制的。 LBA 没有 磁盘&#xff0c; 柱面的概念。 2 对于寄存器的说明。 什么是 CHS呢&#xff1f; 就是机械磁盘。 这里只找到了 LB…

【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算 导读一、补码的优势二、补码的加法运算三、补码的减法运算四、原码、反码、补码的特性结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 经过前面的介绍&#xff0c;我们已经初步认识了有符号整数的三种表示形式&…

使用ShardingSphere实现MySql的分库分表

目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候&#xf…

Servlet入门学习笔记-Servlet技术

为什么需要Servlet &#xff1f; 使用JSP技术如何编写服务器动态网页&#xff1f; 流程图&#xff1a;JSP使用Java生成动态内容 在JSP技术出现之前如何编写服务器动态网页&#xff1f; 流程图&#xff1a;Java代码就是Servlet程序 什么是Servlet &#xff1f; Servlet 是一个…

sqli-labs靶场自动化利用工具——第10关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生&#xff0c;或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢&#xff1f;可能有些人会说不是有sqlmap&#…

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要代码详解如何在自己的论文中描述摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它们与输入特征相互作用…

【Java】方法的重载

文章目录 前言一、方法重载是什么&#xff1f;二、方法重载的注意事项 1、一个类中&#xff0c;只要一些方法的名称相同&#xff0c;形参列表不同&#xff0c;那么它们就是方法重载了&#xff0c;其他的不管&#xff08;如&#xff1a;修饰符&#xff0c;返回值类型是否一样都无…

彻底学会防抖和节流

目录 防抖&#xff08;Debounce&#xff09; 节流&#xff08;Throttle&#xff09; 如何选择使用防抖和节流&#xff1f; 总结 Vue 3 中使用防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09; 防抖&#xff08;Debounce&#xff09;示例 节…

普发Pfeiffer TCP600TCP5000手侧

普发Pfeiffer TCP600TCP5000手侧

unity3d入门教程三

unity3d入门教程三 8.1游戏脚本8.2脚本的使用8.3认识脚本组件8.4帧率9.1游戏脚本9.2获取节点和组件9.3MonoBehaviour9.4父节点与子节点9.5组件的属性9.6脚本的单步调试 8.1游戏脚本 通过程序控制对象属性&#xff08;如运动&#xff0c;修改transform的位置属性&#xff09; …

【STM32】VOFA+上位机 PID调参

【STM32】VOFA上位机 PID调参 前言VOFA简介 VOFA配置VOFA动态调节PID参数VOFA控件STM32解析数据包 PID参数整定一般调节法临界比例法试凑法 前言 参考文章如下&#xff1a;VOFA使用说明 使用VOFA上位机进行PID调参 PID参数整定 VOFA VOFA是一款简单易上手的上位机调试软件&a…

vue之我不会

计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model"…