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

题解:洛谷 P3379 【模板】最近公共祖先(LCA) 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。,分别表示树的结点个数、询问的个数和树根结点的序号。结点之间有一条直接连接的边(数据保证可以构成树)。行,每行包含一个正整数,依次为每一个询问的结果。#普及# #最近公共祖先#行每行包含两个正整数。行每行包含两个正整数。第一行包含三个正整数。结点的最近公共祖先。 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述

思路

倍增求lca( 最近公共祖先 )

代码
// Problem: P3379 【模板】最近公共祖先(LCA)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3379
// Memory Limit: 500 MB
// Time Limit: 1500 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define base 233 
#define pb push_back
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
//#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=1e9+7;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/

int n,m,s,head[maxn],tot;
struct node
{
	int to;
	int next;
}edge[maxn];
int deep[maxn],lg[maxn],pre[maxn][30];

void init()
{
	memset(head,-1,sizeof(head));
	memset(deep,0,sizeof(deep));
	memset(lg,0,sizeof(lg));
	memset(pre,0,sizeof(pre));
	tot=0;
}
void add(int u,int v)
{
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
void dfs(int pos,int fa)
{
	pre[pos][0]=fa;
	deep[pos]=deep[fa]+1;
	for(int i=1;i<=lg[deep[pos]];i++)
		pre[pos][i]=pre[pre[pos][i-1]][i-1];
	for(int i=head[pos];i!=-1;i=edge[i].next)
		if(edge[i].to!=fa)
			dfs(edge[i].to,pos);
}
int lca(int x,int y)
{
	if(deep[x]<deep[y]) swap(x,y);
	while(deep[x]>deep[y])
		x=pre[x][lg[deep[x]-deep[y]]-1];
	if(x==y) return x;
	for(int i=lg[deep[x]]-1;i>=0;i--)
		if(pre[x][i]!=pre[y][i])
			x=pre[x][i],y=pre[y][i];
	return pre[x][0];
}

int main() 
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	init();
	cin>>n>>m>>s;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	for(int i=1;i<=n;i++)
		lg[i]=lg[i>>1]+1;
	dfs(s,0);
	while(m--)
	{
		int x,y;
		cin>>x>>y;
		cout<<lca(x,y)<<endl;
	}
    return 0;
} 
SOI技术实战:从晶圆结构到芯片性能提升的完整解析 本文深入解析SOI(Silicon on Insulator)技术如何通过独特的三明治晶圆结构提升芯片性能,涵盖从220nm SOI层设计到7nm节点的工艺挑战。详细探讨了埋氧层的绝缘优势、性能提升的物理机制,以及AMD处理器和5G射频中的实战应用,为半导体行业提供关键技术洞见。 阅读详情

相关推荐

Matlab之fdesign的应用说明

fdesign 是 MATLAB 中用于数字滤波器设计的工具(属于),它提供了一种系统化的方式来定义滤波器参数并生成相应的滤波器。指定滤波器的频率、幅度等参数。例如,设计一个低通滤波器:Fs = 1000;% 采样率 (Hz)% 通带截止频率% 阻带截止频率Apass = 1;% 通带衰减 (dB)Astop = 60;% 阻带衰减 (dB)

嵌入式老牛的博客 1052

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

P3379 【模板】最近公共祖先(LCA),用线段树和倍增求解!

qq_17807067的博客 592

Mumax3代码模板:从基础设置到材料参数优化

本文提供了一份详尽的Mumax3微磁学模拟代码模板,从基础网格设置、边界条件到核心材料参数(如钴的Msat、Aex、Ku1)配置与优化均有涵盖。文章深入解析了特征长度计算、初始化方法、弛豫与动力学模拟流程,并分享了并行计算与参数扫描等效率提升技巧,旨在帮助用户快速上手并优化模拟工作流。

moss5的博客 702

P3379 【模板】最近公共祖先(LCA)

P3379 【模板】最近公共祖先(LCA)

静谧幽蓝の神奇小屋 1003

Ubuntu 20.04 LTS下5分钟搞定ONLYOFFICE协作空间社区版(Docker版保姆级教程)

本文提供了一份在Ubuntu 20.04 LTS系统上,通过Docker快速部署ONLYOFFICE协作空间社区版的保姆级教程。内容涵盖从系统准备、Docker环境搭建,到执行自动化安装脚本、完成Web初始化的全流程,并详细说明了部署后的安全配置、数据备份及基本运维要点,帮助用户高效构建私有、安全、可控的团队文档协作平台。

weixin_28826961的博客 261

大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析

大模型训练方法全面解析 本文系统介绍了当前主流的大模型训练和对齐技术,包括监督微调(SFT)、拒绝采样微调(RFT)、信任域策略优化(TRPO)、直接偏好优化(DPO)、近端策略优化(PPO)等。这些方法各有特点:SFT简单高效但数据依赖性强;RFT通过质量筛选提升输出质量;TRPO训练稳定但计算复杂;PPO是RLHF核心算法,平衡探索与利用。文章详细分析了各方法的实现原理、优势劣势及适用场景,为开发者选择合适的大模型训练策略提供参考。

2794

P3379 【模板】最近公共祖先(LCA)|倍增法练习

定义dep数组记录深度,edge二维数组存结点u的邻接点,fa[u][i]存结点u的i级祖先结点(i从0到19)dfs建表:记录深度dep[u],为父节点深度+1。每个结点的i级祖先(通过递推获得,u的i级祖先等于u的i-1级祖先的 i-1级祖先,相当于我一半一半的跳),所以级数从小到大枚举。两者计算完毕,向下遍历所有孩子结点,注意,要判断孩子是否为父节点,防止往回走。

qq_61814350的博客 684

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1182

P3379 【模板】最近公共祖先(LCA)-(tarjan算法)

接下来 N−1 行每行包含两个正整数 x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 M 行每行包含两个正整数 a,b,表示询问 a 结点和 b 结点的最近公共祖先。第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。举个例子,求5和6的最近公共祖先是3,一开始所有的pre[]值都为他们本身,对于 100% 的数据,1≤N,M≤500000,1≤x,y,a,b≤N,对于 30% 的数据,N≤10,M≤10。

silent_milkshake的博客 573

拆解汽车T-Box:从4G模块到MCU,手把手教你理解车联网的‘黑匣子’

本文深入拆解汽车T-Box,揭示其作为车联网‘黑匣子’的核心架构与工作原理。从4G模块、MCU主控到外设接口,详细解析各组件功能及协同机制,并通过实战案例展示故障诊断与性能优化技巧,帮助读者全面理解T-Box在智能汽车中的关键作用。

weixin_30955617的博客 492

用UltraISO制作镜像以RAW格式刻录系统到U盘后,在Windows上无法识别的解决办法

在这篇文章中,用UltraISO制作镜像后,会使得U盘无法识别!!!那么,如何抹掉U盘的数据,格式化U盘呢?

拥抱具身智能,昇腾Ascend C 2730

【洛谷 P3379】最近公共祖先【LCA模板】

题目描述 题目 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,SN,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1N−1N−1 行每行包含两个正整数 x,yx,yx,y,表示 xxx 结点和 yyy 结点之间有一条直接连接的边(数据保证可以构成树)。 接下来 MMM行每行包含两个正整数 a,ba, ba,b,表示询问 aaa 结点和 bbb 结点的最近公共祖先。 输出格式 输出包含 MMM 行,每行包含一个正整数

绫 1711

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1146

P3379 【模板】最近公共祖先(LCA)【题解】(Tarjan法)

LCA

cyx20091026的博客 824

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

题解:P3379 【模板】最近公共祖先(LCA)树剖

重儿子:设点vvv是点uuu的儿子,若点vvv是点uuu的所有儿子中svs_vsv​最大的一个,则vvv是uuu的重儿子。由此易得,当一点uuu仅有111个儿子vvv,那vvv就是uuu的重儿子。轻儿子:一节点的子结点中,除了重儿子,其余都为轻儿子。重链:一条由轻儿子或根节点(即不是重儿子)开头全部由重儿子组成的链(所以一个点也算一条重链)。举个例子,如下图:黄色的是重儿子,一个紫色圈起来的是一条重链。

Chu_yh的博客 2047

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

洛谷 P3379 [模板] 最近公共祖先(LCA)

LCA 倍增算法 邻接表 DFS 动态规划 线性dp 洛谷题解 C++代码 附详细注释

一只摸鱼的bbc 747

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

P3379 【模板】最近公共祖先(LCA)题目

对于 100% 的数据,1 ≤ N, M ≤ 500000,1 ≤ x, y, a, b ≤ N,接下来 M 行每行包含两个正整数 a,b,表示询问 a 结点和 b 结点的最近公共祖先。第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。第一次询问:2,4 的最近公共祖先,故为 4。第二次询问:3,2 的最近公共祖先,故为 4。第三次询问:3,5 的最近公共祖先,故为 1。第四次询问:1,2 的最近公共祖先,故为 4。第五次询问:4,5 的最近公共祖先,故为 4。

大家好,我是宗嗣令 677
上一篇: P3378 【模板】堆 ( 手写 / stl )
下一篇: P3128 [USACO15DEC]Max Flow P ( 树上差分 )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值