LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。 ———来自百度百科 额~~看不懂没关系,我来举个栗子 ,你和小A是表兄弟,LCA就是求你和小A的哪一个长辈是同一个人; 并且这个人辈分越小越好。 再来举个栗子 : BY:鱡舞 11和12的LCA为2,4和9的LCA为...
也就是说 first(u) < first(v) ,那么在 u 遍历到 v 过程中深度最小的点就是 LCA(T, u, v) (这一点在Tarjan算法中也有运用),假设我们求的是 LCA(T, 6, 8) = 1 ,那么我们把从 6 遍历到 8 时涉及到的顶点单独取出来,就可以得到下面一幅图:...
e[N*2],w[N*2],idx;intdep[N],f[N][22],dis[N];intsum[N];//差分数组pair<int,int> tran[N];//用于存储从x运输到y的位置intblca[N],seq[N];//用于存储lca(x,y),记录下行走路径intn,m,cnt;voidadd(inta,intb,intc){e[++idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx;}voiddfs...
lg2[i]=lg2[i-1]+(1<<lg2[i-1]==i);//预处理logget_depth(s,0);//预处理2^n级父亲,深度等信息for(inti=1;i<=m;i++)scanf("%d %d",&x,&y),printf("%d\n",LCA(x,y));return0; }
【树链剖分】洛谷P3379 树链剖分求LCA 其实就是让两个点,看谁的深度大,谁就先跳。直到两个点的top顶点一致时,此时谁的深度小谁就是Lca. 树剖就是把树剖分成若干条不相交的链,目前常用做法是剖成轻重链 所以我们定义siz[x]为以x为根结点的子树的结点个数...
洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条...
最后lca,如果两节点在同一链上返回深度最小的,否则让深度最深变为链头的父节点,然后重复找,直到在同一链上。最后返回深度最小的。 #include<bits/stdc++.h>#define ll long longusingnamespacestd;intmain(){lln,m,s;cin>>n>>m>>s;vector<vector<ll>>edge(n+1);for(inti=1;i<n;i++){llu,v;ci...
[x][0];}intmain(){scanf("%d%d%d",&n,&m,&s);int x,y;for(int i=0;i<n-1;i++){scanf("%d%d",&x,&y);g[x].push_back(y);g[y].push_back(x);}deep[0]=-1;dfs(s,0);pre();for(int i=0;i<m;i++){scanf("%d%d",&x,&y);printf("%d\n",lca(x,y));}return0...
【题解】洛谷P2680[NOIP2015]运输计划 树链剖分+树上差分+LCA+二分,程序员大本营,技术文章内容聚合第一站。
[洛谷 4211][LNOI2014]LCA 目录 显示 题面链接 https://www.luogu.com.cn/problem/P4211 题解 考虑最原始的 LCA 求法:我们从两个点出发,向上爬,并标记沿途所有节点。所有被标记两次的点中最深的点就是这两个点的 LCA。 仿照这样的思路,我们可以很快想出一种求 LCA 深度的方法:将一个点到根节点路径...