首页 > 其他分享 >LCA 板子

LCA 板子

时间:2023-02-17 14:12:26浏览次数:29  
标签:fa int 板子 dep add LCA -- hd

本例 求树上两点的距离

 

#include <bits/stdc++.h>
using namespace std ;
 const int N=5*1e6+2,M=5*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,z,s;
 	cin>>n>>m>>s;
 	for(i=1;i<n;i++) cin>>x>>y,add(x,y),add(y,x);
 	init(s,0);
 	while(m--) cin>>x>>y,cout<<lca(x,y)<<endl;
 }
 
 
 

 

标签:fa,int,板子,dep,add,LCA,--,hd
From: https://www.cnblogs.com/towboa/p/17129930.html

相关文章

  • Splay 板子
    OIwiki代码害人不浅。#include<bits/stdc++.h>#defineilinlineusingnamespacestd;ilintread(){ intxr=0,F=1;charcr=getchar(); while(cr<'0'||cr>'9')......
  • P1004 [NOIP2000 提高组] 方格取数——四维DP板子题
    题目描述设有 N×N 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例):A00000000001300......
  • 【代码源 Div1 - 105】#451. Dis(倍增求LCA)
    problemsolution给出n个点的一棵树,每个点有各自的点权,m次询问两个点简单路径所构成点集的异或和。直接在树上求LCA,把每个点权放进去预处理一下即可。#include<bits/stdc+......
  • 【bzoj4668】冷战 (并查集按秩合并+朴素LCA)
    题目描述1946年3月5日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕。美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国......
  • AD9144-FMC-EBZ ADI数据转接板四通道数模转换器评估板子模块
                      ......
  • Tarjan 强连通分量 板子
    #include<bits/stdc++.h>usingnamespacestd;constintN=10005;intn,m;intscc[N],siz[N],cnt;intdfn[N],low[N],tot;bitset<N>instk;stack<int>stk;......
  • [ABC014D] 閉路 [LCA]
    现有一棵\(N(N\le10^5)\)个节点的树,保证节点编号为\(1\toN\)。首先输入\(N\),然后输入\(N-1\)条边。然后输入一个整数\(q(q\le10^5)\)。接下来给出\(q\)次询......
  • LCA
    ST表求LCAnamespaceLCA{intdfn[N<<1],po[N],dep[N],tot,dfx[N],id,xfd[N];ilvoiddfs(intu,intfa){dfx[u]=++id,xfd[id]=u;dfn[++tot]=......
  • 【YBT2023寒假Day2 B】树上距离(分块)(LCA)(DP)
    树上距离题目链接:YBT2023寒假Day2B题目大意一棵树,边有边权,每次给出l,r,x,求x号点走到编号在l~r之间最近的点的距离。思路这题还有其它方法,比如线段树分治+线段树......
  • 倍增LCA板子
    #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=5e5+10;intn,m,s,a,b;vector<int>e[N];intde......