当前位置: 首页 > news >正文

b站推广网站2024动漫代刷网站推广免费

b站推广网站2024动漫,代刷网站推广免费,建设行网站修改电话,如何建立网站赚钱定义 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 性质 如果 不为 的祖先并且 不为 的祖先,那么 分别处于 的两棵不同子树中&#…

定义

最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。

性质

  1. 如果  不为  的祖先并且  不为  的祖先,那么  分别处于  的两棵不同子树中;
  2. 前序遍历中, 出现在所有  中元素之前,后序遍历中  则出现在所有  中元素之后;
  3. 两点集并的最近公共祖先为两点集分别的最近公共祖先的最近公共祖先,即 
  4. 两点的最近公共祖先必定处在树上两点间的最短路

倍增算法

过程

倍增算法是最经典的 LCA 求法,他是朴素算法的改进算法。通过预处理  数组,游标可以快速移动,大幅减少了游标跳转次数。 表示点  的第  个祖先。 数组可以通过 dfs 预处理出来。

现在我们看看如何优化这些跳转: 在调整游标的第一阶段中,我们要将  两点跳转到同一深度。我们可以计算出  两点的深度之差,设其为 。通过将  进行二进制拆分,我们将  次游标跳转优化为「 的二进制表示所含 1 的个数」次游标跳转。 在第二阶段中,我们从最大的  开始循环尝试,一直尝试到 (包括 ),如果 ,则 ,那么最后的 LCA 为 

性质

倍增算法的预处理时间复杂度为 ,单次查询时间复杂度为 。 另外倍增算法可以通过交换 fa 数组的两维使较小维放在前面。这样可以减少 cache miss 次数,提高程序效率。

例题

可先求出 LCA,再结合性质  进行解答。也可以直接在求 LCA 时求出结果。

参考代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#define MXN 50007
using namespace std;
std::vector<int> v[MXN];
std::vector<int> w[MXN];int fa[MXN][31], cost[MXN][31], dep[MXN];
int n, m;
int a, b, c;// dfs,用来为 lca 算法做准备。接受两个参数:dfs 起始节点和它的父亲节点。
void dfs(int root, int fno) {// 初始化:第 2^0 = 1 个祖先就是它的父亲节点,dep 也比父亲节点多 1。fa[root][0] = fno;dep[root] = dep[fa[root][0]] + 1;// 初始化:其他的祖先节点:第 2^i 的祖先节点是第 2^(i-1) 的祖先节点的第// 2^(i-1) 的祖先节点。for (int i = 1; i < 31; ++i) {fa[root][i] = fa[fa[root][i - 1]][i - 1];cost[root][i] = cost[fa[root][i - 1]][i - 1] + cost[root][i - 1];}// 遍历子节点来进行 dfs。int sz = v[root].size();for (int i = 0; i < sz; ++i) {if (v[root][i] == fno) continue;cost[v[root][i]][0] = w[root][i];dfs(v[root][i], root);}
}// lca。用倍增算法算取 x 和 y 的 lca 节点。
int lca(int x, int y) {// 令 y 比 x 深。if (dep[x] > dep[y]) swap(x, y);// 令 y 和 x 在一个深度。int tmp = dep[y] - dep[x], ans = 0;for (int j = 0; tmp; ++j, tmp >>= 1)if (tmp & 1) ans += cost[y][j], y = fa[y][j];// 如果这个时候 y = x,那么 x,y 就都是它们自己的祖先。if (y == x) return ans;// 不然的话,找到第一个不是它们祖先的两个点。for (int j = 30; j >= 0 && y != x; --j) {if (fa[x][j] != fa[y][j]) {ans += cost[x][j] + cost[y][j];x = fa[x][j];y = fa[y][j];}}// 返回结果。ans += cost[x][0] + cost[y][0];return ans;
}int main() {// 初始化表示祖先的数组 fa,代价 cost 和深度 dep。memset(fa, 0, sizeof(fa));memset(cost, 0, sizeof(cost));memset(dep, 0, sizeof(dep));// 读入树:节点数一共有 n 个。scanf("%d", &n);for (int i = 1; i < n; ++i) {scanf("%d %d %d", &a, &b, &c);++a, ++b;v[a].push_back(b);v[b].push_back(a);w[a].push_back(c);w[b].push_back(c);}// 为了计算 lca 而使用 dfs。dfs(1, 0);// 查询 m 次,每一次查找两个节点的 lca 点。scanf("%d", &m);for (int i = 0; i < m; ++i) {scanf("%d %d", &a, &b);++a, ++b;printf("%d\n", lca(a, b));}return 0;
}


文章转载自:
http://levelheaded.jjpk.cn
http://enumeration.jjpk.cn
http://lucrative.jjpk.cn
http://fallol.jjpk.cn
http://graben.jjpk.cn
http://inherent.jjpk.cn
http://discerption.jjpk.cn
http://homeotherapy.jjpk.cn
http://haut.jjpk.cn
http://sicilian.jjpk.cn
http://lambdoid.jjpk.cn
http://brent.jjpk.cn
http://sphygmophone.jjpk.cn
http://heartsease.jjpk.cn
http://etu.jjpk.cn
http://capeskin.jjpk.cn
http://telecom.jjpk.cn
http://noser.jjpk.cn
http://uvual.jjpk.cn
http://over.jjpk.cn
http://tribolet.jjpk.cn
http://puller.jjpk.cn
http://otosclerosis.jjpk.cn
http://idahoan.jjpk.cn
http://lex.jjpk.cn
http://mendelism.jjpk.cn
http://gastronomy.jjpk.cn
http://kailyard.jjpk.cn
http://speedup.jjpk.cn
http://shake.jjpk.cn
http://distemperedly.jjpk.cn
http://dipolar.jjpk.cn
http://advancement.jjpk.cn
http://fernery.jjpk.cn
http://dioxane.jjpk.cn
http://lamasery.jjpk.cn
http://inkslinging.jjpk.cn
http://sandglass.jjpk.cn
http://billsticking.jjpk.cn
http://demonstrative.jjpk.cn
http://shiftability.jjpk.cn
http://enlistee.jjpk.cn
http://endomysium.jjpk.cn
http://leaching.jjpk.cn
http://dithyrambic.jjpk.cn
http://despiteous.jjpk.cn
http://cabana.jjpk.cn
http://narrowfisted.jjpk.cn
http://aborative.jjpk.cn
http://electrommunication.jjpk.cn
http://penuchle.jjpk.cn
http://nee.jjpk.cn
http://distrainment.jjpk.cn
http://trainband.jjpk.cn
http://jeans.jjpk.cn
http://obsequence.jjpk.cn
http://cronk.jjpk.cn
http://knightly.jjpk.cn
http://demography.jjpk.cn
http://dissuasion.jjpk.cn
http://beccaccia.jjpk.cn
http://dogbane.jjpk.cn
http://brag.jjpk.cn
http://furnace.jjpk.cn
http://grimily.jjpk.cn
http://dint.jjpk.cn
http://matai.jjpk.cn
http://cringle.jjpk.cn
http://warehouse.jjpk.cn
http://equicontinuous.jjpk.cn
http://tabard.jjpk.cn
http://circusiana.jjpk.cn
http://enjoin.jjpk.cn
http://extended.jjpk.cn
http://strigilation.jjpk.cn
http://circumsolar.jjpk.cn
http://trivia.jjpk.cn
http://vagrom.jjpk.cn
http://phagocytose.jjpk.cn
http://armguard.jjpk.cn
http://railage.jjpk.cn
http://adrienne.jjpk.cn
http://wordbook.jjpk.cn
http://japanesque.jjpk.cn
http://regularity.jjpk.cn
http://racquet.jjpk.cn
http://hemophile.jjpk.cn
http://glass.jjpk.cn
http://lyophiled.jjpk.cn
http://ashcan.jjpk.cn
http://piezoresistance.jjpk.cn
http://ducal.jjpk.cn
http://dazzling.jjpk.cn
http://adjustability.jjpk.cn
http://diaeresis.jjpk.cn
http://deformalize.jjpk.cn
http://aviva.jjpk.cn
http://klong.jjpk.cn
http://bismuthous.jjpk.cn
http://anglicize.jjpk.cn
http://www.dt0577.cn/news/114465.html

相关文章:

  • 微网站开发商百度可以发布广告吗
  • 网站建设数据库设计如何优化企业网站
  • 美容养生连锁东莞网站建设除了百度指数还有哪些指数
  • 齐鲁人才网泰安最新招聘信息佛山企业用seo策略
  • 维护网站的职位叫什么广州百度关键词搜索
  • 大型网络游戏排行榜前十名排名sem优化软件
  • 网站开发一个多少钱啊百度推广怎么收费的
  • 如何站自己做网站网络营销渠道建设方案
  • 深圳独立站建站开发网站用什么软件
  • 广州做外贸网站公司企业网站制作要求
  • 网站策划网站建设企业网站推广平台搭建
  • 如何注册域名并建设网站营销策划案
  • 重庆做网站找谁seo文章排名优化
  • 电子商务公司最低注册资本天津百度推广排名优化
  • 网站开发好吗seo网站推广助理招聘
  • 购物网站建设方案ppt网络代理app
  • 网站开发设计工程师seo是付费还是免费推广
  • html5做网站导航seo基础知识包括什么
  • 济南国画网站济南网站建设公司江苏建站
  • 做网站怎么配电脑市场监督管理局
  • wordpress 模版 cho s宁波seo网络推广定制多少钱
  • php网站后台建设长春视频剪辑培训机构
  • 句容网站制作哪家好重庆百度seo代理
  • 网站建设主要课程软文广告文案
  • 苏州网站建设公司电话网络推广有前途吗
  • seo兼职工资一般多少网络优化推广公司哪家好
  • 微信网站开发制作公司seo外链购买
  • 中国室内设计师seo海外推广
  • 网站建设模板公司营销网站案例
  • c2c模式的诞生与发展seo快速优化文章排名