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

【机房——LCA】

题目

代码

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

const int N = 1e5+10;
const int M = 2e5+10;

int n, q, cnt[N];
int h[N], e[M], ne[M], idx;
int d[N], f[N][18], dist[N][18];

void add(int a, int b)
{
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
void dfs(int u, int fa)
{
	for(int i = h[u]; ~i; i = ne[i])
	{
		int j = e[i];
		if(j == fa) continue;
		d[j] = d[u] + 1;
		f[j][0] = u;
		dist[j][0] = cnt[u];
		for(int k = 1; k <= 17; k++)
		{
			f[j][k] = f[f[j][k-1]][k-1];
			dist[j][k] = dist[j][k-1] + dist[f[j][k-1]][k-1];
		}
		
		dfs(j, u);
	}
}
int lca(int a, int b)
{
	int retv = cnt[a] + cnt[b];
	
	if(d[a] < d[b]) swap(a, b);
	
	for(int i = 17; i >= 0; i--)
		if(d[f[a][i]] >= d[b])
		{
			retv += dist[a][i];
			a = f[a][i];
		}

	if(a == b) return retv - cnt[a];
	
	for(int i = 17; i >= 0; i--)
		if(f[a][i] != f[b][i])
		{
			retv += dist[a][i];
			retv += dist[b][i];
			a = f[a][i];
			b = f[b][i];
		}
		
	retv += dist[a][0] + dist[b][0];
	return retv - cnt[f[a][0]];
}
int main()
{
	memset(h, -1, sizeof h);
	scanf("%d%d", &n, &q);
	
	for(int i = 1; i < n; i++)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		add(a, b); add(b, a);
		cnt[a]++, cnt[b]++;
	}
	
	d[1] = 1;
	dfs(1, -1);
	
	while(q--)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		printf("%d\n", lca(a, b));
	}
}

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

相关文章:

  • 小米火龙CPU和其他几代温度太高的CPU是由谁代工的
  • 卢卡斯定理判断组合数奇偶(Codeforces Round 1006 (Div. 3)——F)
  • 【含文档+PPT+源码】基于SpringBoot的宠物领养系统设计与实现
  • Rust语言基础知识详解【四】
  • #11 如何使用 Kaggle packages
  • Vue学习教程-18Vue单文件组件
  • LeetCodehot 力扣热图100 括号生成
  • 水仙花数(华为OD)
  • 2025-03-01 学习记录--C/C++-PTA 7-35 有理数均值
  • CountDownLatch使用
  • DeepSeek 开源周五个开源项目,引领 AI 创新?
  • 构建神经网络之Matplotlib(持续完善)
  • 生态安全相关
  • 【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random
  • 《几何原本》命题I.1
  • aws(学习笔记第三十课) 练习使用transit gateway
  • yolov12 部署瑞芯微 rk3588、RKNN 部署工程难度小、模型推理速度快
  • 计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)
  • 计算机网络之传输层(tcp协议)
  • kubernetes 高可用集群搭建
  • Dify v1.0.0 里程碑版本正式亮相
  • Metal学习笔记九:光照基础
  • WPF高级 | WPF 与数据库交互:连接、查询与数据更新
  • 《操作系统 - 清华大学》 8 -11:进程管理:上下文切换
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(六) 导航栏 和 个人信息设置
  • C语言基础系列【17】位域
  • 【NLP 30、大模型中的 ”Token“】
  • Tagr 5 for Mac v5.8.0 [MAS] 音频标签编辑工具 支持M、Intel芯片
  • 4.万事开头难—第一个Java程序
  • 使用Maven搭建Spring Boot框架