炒鸡炒鸡炒鸡经典的模板题!

直接上代码啦

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#define maxn 500000
using namespace std;int n,m,s,u,v,num;
int fir[maxn*2],d[maxn*2],p[maxn*2][21];struct qwq
{int to;int next;
}e[maxn*4];int read()
{int x=0;char ch=' ';while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x;
}void addedge(int u,int v)
{num++;e[num].to=v;e[num].next=fir[u];fir[u]=num;
}void dfs(int u,int fa)
{d[u]=d[fa]+1;p[u][0]=fa;for(int i=1;(1<<i)<=d[u];i++){p[u][i]=p[p[u][i-1]][i-1];}for(int i=fir[u];i;i=e[i].next){if(e[i].to!=fa) dfs(e[i].to,u);}
}int lca(int u,int v)
{if(d[u]>d[v]) swap(u,v);for(int i=20;i>=0;--i){if(d[u]<=d[v]-(1<<i)) v=p[v][i];}if(u==v) return u;for(int i=20;i>=0;--i){if(p[u][i]==p[v][i])continue;u=p[u][i];v=p[v][i];}return p[u][0];
}int main()
{n=read();m=read();s=read();for(int i=1;i<n;++i){u=read();v=read();addedge(u,v);addedge(v,u);}dfs(s,0);for(int i=1;i<=m;++i){u=read();v=read();printf("%d\n",lca(u,v));}return 0;
}

稍微有点疑惑的是为什么节点上跳2^i时不用重新遍历新节点上移2^i,因为2^(i-1)+2^(i-1)=2^i啦,树的深度一般一般一般不会超过2^20啦

转载于:https://www.cnblogs.com/pumpkin-qwq/p/9551340.html

秘籍之树上蹦迪--LCA相关推荐

  1. Distance on the tree(树上倍增+主席树+树上差分+lca)南昌网络赛

    题目链接:南昌邀请赛网络赛Distance on the tree 统计一条链上边权小于k的边数. 树上差分,对于边权来说,一条链上的边的条数=sum[x]+sum[y]-2*sum[lca(x,y) ...

  2. 洛谷 P4281 [AHOI2008]紧急集合 / 聚会(树上倍增 LCA)

    [AHOI2008]紧急集合 / 聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有 n n n 个等待点,有 n − 1 n-1 n−1 条道路连接着它们 ...

  3. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  4. P3128-最大流Max Flow【树上差分,LCA】

    正题 题目大意 一棵树 若干条路径,哪个点经过的路径最多,求路径条数. 解题思路 对于每条路径计算一次LCALCALCA,然后树上差分就好了. codecodecode #include<cst ...

  5. P1967,ssl2267-货车运输【树上倍增LCA,最小生成树变形kruskal】

    正题 题目链接: https://www.luogu.org/problemnew/show/P1967 大意 一个无向图,每个边有个权值,若干个询问,求两个点之间的一条最短路是这条最短路上的最小权值 ...

  6. P2680 运输计划(树上差分+lca+二分)

    题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...

  7. 【2022寒假基础集训】第二场 - G.小沙的身法【树上差分+LCA】

    Date:2022.04.28 题目描述 小沙发现他打球打不赢别人,打架也打不赢别人,所以他去了少林寺学习身法,以求打球的时候可以跑的更快,打架的时候也可以跑的更快(bushi). 少林寺的方丈告诉小 ...

  8. 树上倍增法求最近公共祖先LCA

    LCA,最近公共祖先,这个东西有很多作用,因此,如何高效求出LCA就成了一个热点的讨论话题. 下面所有的讨论都以图中这棵树为例子. 先来了解下什么是倍增吧,倍增其实就是二分的逆向,二分是逐渐缩小范围, ...

  9. 对LCA、树上倍增、树链剖分(重链剖分长链剖分)和LCT(Link-Cut Tree)的学习

    LCA what is LCA & what can LCA do LCA(Lowest Common Ancestors),即最近公共祖先 在一棵树上,两个节点的深度最浅的公共祖先就是 L ...

  10. PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA

    1140 Look-and-say Sequence(20 分) 题意:观察序列D, D1, D111, D113, D11231, D112213111, ...,显然后一个串是对前一个串每一小段连 ...

最新文章

  1. FireFox 开始放弃 Flash:停止部分内容支持
  2. HTML、CSS、JS都有哪些区别
  3. 不使用 Maven 等构建工具,而使用原始方法在 IntelliJ IDEA 中整合 Tomcat 部署 Web 应用
  4. centos7 校正linux系统时间_基于centos7系统部署NTP服务及配置时间定时同步
  5. 隐藏UITableView当没有数据或数据不够的时候出现的分割线.
  6. C++小型公司管理系统
  7. C4996 'sprintf': This function or variable may be unsafe.
  8. 微信私人心情录小程序源码
  9. 数字图像处理_冈萨雷斯
  10. 一套基于java的开源车牌识别算法
  11. 企业管理系统各主要模块简介
  12. QAndroidJniObject::callStaticObjectMethod参数含义
  13. Faceboxes pytorch代码解读(一) box_utils.py(上篇)
  14. 英语从句(英语兔学习笔记)
  15. 主成分分析 (PCA) 和独立成分分析 (ICA)附Matlab代码
  16. 一元试用虚拟服务器,一元试用云服务器
  17. 官宣:传智播客品牌全新升级为「传智教育」
  18. 抖音短视频审核流程梳理
  19. iOS UIWebView 缩放
  20. photoshop学习笔记(二)---PS的相关工具

热门文章

  1. Android-多线程AsyncTask
  2. WPF 创建右键菜单
  3. 如何在XML序列化时隐藏可为null的的字段(XmlElement和XmlAttribute)
  4. 七种qsort排序方法
  5. 会声会影2018,带你体验不一样的光影世界!
  6. 报错:The following signatures couldn‘t be verified because the public key is not available: NO_PUBKEY
  7. 【Flutter】Dart中的var、final 和 const基本使用
  8. iOS底层探索之多线程(五)—GCD不同队列源码分析
  9. 云计算介绍、TCP/IP协议及配置
  10. 对vue饿了么项目重构之后的一些理解