首页 > 其他分享 >lca 板子

lca 板子

时间:2022-11-28 12:44:58浏览次数:51  
标签:fa int 板子 dep lca go hd

这题#10130. 「一本通 4.4 例 1」点的距离

求树上两点的距离

 

#include <bits/stdc++.h>
using namespace std ;
 const int N=1e6+2,M=N;
 int nxt[M],hd[N],all,go[M],n;
 int dep[N],f[N][22];
 void add(int x,int y){
     go[++all]=y,nxt[all]=hd[x],hd[x]=all;
 }
 
  void init(int x,int fa){
     int i,y;
     dep[x]=dep[fa]+1;
     f[x][0]=fa;
     for(i=0;i<=19;i++) f[x][i+1]=f[f[x][i]][i];
     
     for(i=hd[x];i;i=nxt[i]){
         y=go[i]; if(y==fa) continue;
         init(y,x);
     }
 }
 int lca(int x,int y){
     int i;
     if(dep[x]<dep[y]) swap(x,y);
     
     for(i=19;i>=0;i--){
         if(dep[f[x][i]]>=dep[y]) x=f[x][i];
     }
     if(x==y) return x;
     
     for(i=19;i>=0;i--){
         if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i]; 
     }
     return f[x][0];
 }
 signed main(){
     int i,m,x,y;
     cin>>n;
     for(i=1;i<n;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x);
     init(1,0);
     scanf("%d",&m);
     while(m--) {
         scanf("%d%d",&x,&y);
         cout<<dep[x]+dep[y]-2*dep[lca(x,y)]<<endl;
     }
 }
 
 
 

 

标签:fa,int,板子,dep,lca,go,hd
From: https://www.cnblogs.com/towboa/p/16931881.html

相关文章

  • 割点板子
    一些直白的理解,和标准定义有差别,但也足够了 点双连通:一个图任意去掉一个点后仍然联通;   边双连通同理割点:去掉某个点后,图不连通     割边同理 求割点(l......
  • 树上差分与LCA
    树上差分与LCA​​可以看b站的这个视频​​讲的很不错强烈推荐LCA什么是LCALCA全称LeastCommonAncester即最近公共祖先祖先:从树根到当前节点的路径中经过的点(不包括当......
  • 高精度板子
     #include<bits/stdc++.h>usingnamespacestd;intcompare(stringstr1,stringstr2){if(str1.length()>str2.length())return1;elseif(str1.length(......
  • 一些板子
    离散化://离散化,可以处理一些跨越区间比较大的时候的位置关系,空间更紧凑intn,m;inta[N],b[N],c[N];intcnt=0;//lower_bound第一个大于等于x的数//upper_bound......
  • 题解 LGP4211【[LNOI2014]LCA】
    problem一棵树,多次给定\(l,r,z\)询问\(\sum_{l\leqi\leqr}dep_{lca(i,z)}\),允许离线,\(n\leq50000\)。solution转换:这个\(dep_u\)的定义为\(u\)到根节点的点数......
  • CSP-J/S & NOIP 常用板子大全 !
    HNCSP-J/S2022RP++!序号算法①SPFA②并查集③最小生成树④拓扑排序⑤堆⑥字典树N懒得加了1.SPFA题目链接题目描述输入......
  • 快速幂(板子)
    先讨论无需取模的当b为偶数时:ab=a(b/2)*2=(a2)b/2当b为奇数时:ab=a*ab-1=a*(a2)(b-1)/2如 28=(22)4     27=2*(22)3所以,我们可以如此迭代下......
  • vulnhub靶场Trollcave
    0x000靶场描述Trollcave是一个易受攻击的VM,在Vulnhub和信息安全战争游戏的传统中。你从一个你一无所知的虚拟机开始-没有用户名,没有密码,只是你可以在网络上看到的东西......
  • LCA 之 Tarjan(离线)算法
    \(LCA\)之\(Tarjan\)(离线)算法什么是最近公共祖先?在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先......
  • "蔚来杯"2022牛客暑期多校训练营3 A. Ancestor(LCA)
    题目大意是给定两棵节点数相同的树,每个点有一个权值。现在给出k个关键点编号,问有多少个关键点编号,将其删除后在两棵树上分别对剩下的关键点编号对应的点求LCA得到的两个祖......