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

网站建设图片教程视频教程深圳知名网络优化公司

网站建设图片教程视频教程,深圳知名网络优化公司,合二为一的创意产品设计,阿里网站服务器对于结点x和y#xff0c;需要找他们的最近公共祖先 一个最简单的办法就是沿着x和y的父节点一个一个往上找 这样的时间复杂度是o(n)#xff0c;对于较大的数据量会TLE 今天要使用的方法是利用倍增来加速这个找lca的过程 倍增算法#xff1a; 按2的倍数来往上找#xff0…对于结点x和y需要找他们的最近公共祖先 一个最简单的办法就是沿着x和y的父节点一个一个往上找 这样的时间复杂度是o(n)对于较大的数据量会TLE 今天要使用的方法是利用倍增来加速这个找lca的过程 倍增算法 按2的倍数来往上找也就是找第1,2,4,8,16,32...个父节点 而在这里我们需要从大步往小步地去逐渐尝试 比如先尝试找第32个不行再找第16个以此类推 为什么不从小步往大步去尝试呢 这和把一个十进制的数转为一个二进制的数是一样的我们都是从最高位往最低位填1 如果填了这个1比要转换的数大了那就不填 所以想要实现这样的算法我们需要记录各个点的深度以及他们距离的祖先 const int N1E5; int n,m,s; //链式前向星 int to[N1],nxt[N1],h[N],tot; //dep[x]记录结点x的深度 //fa[x][j]记录结点x的距离为2^j的祖先 int dep[N],fa[N][20]; //lg[i]log2[i]1 int lg[N]; void init(){for(int i1;in;i){lg[i]lg[i-1](1lg[i-1]i);} } //x为访问的节点 //f为x的父亲 void dfs(int x,int f){//儿子的深度比父亲大1dep[x]dep[f]1;//节点x的距离为2^0的祖先就是自己的父亲ffa[x][0]f;//更新距离x为2^i远的祖先//由于距离2^i不可能超过dep[x]所以i只要小于lg[dep[x]]就可以了for(int i1;ilg[dep[x]];i){//关系转移的核心公式//距离x为2^i远的祖先就是——距离[距离x为2^(i-1)远的祖先]为2^(i-1)远的祖先fa[x][i]fa[fa[x][i-1]][i-1];}//开始遍历x的子节点for(int ih[x],y;yto[i];inxt[i]){ //如果遍历到了自己的父亲跳过if(yf) continue;dfs(y,x);} } 预处理完毕各个结点fa数组以后我们就可以通过倍增算法来求得他们的lca了 在找lca的时候可能有以下几种情况 1.dep[x]dep[y] 在这种情况下我们只需要x和y同步往上爬,直到他们两个的祖先重合就可以得到x与y的公共祖先了 2.dep[x]dep[y]或dep[y]dep[x] 这两种情况其实是等价的只需要把x与y对调一下即可 现在不妨取dep[x]dep[y] 那么这时会有两种情况 (1) y是x的某个祖先 这个时候x与y的lca一定是y 也就是说只要返回y就可以了 (2)y不是x的某个祖先 这个时候我们就应当先找到一个x的祖先这个祖先和y的深度相同然后再按照情况2处理 综上所述实现代码如下 int LCA(int x,int y){//第1种情况if(dep[x]dep[y]){swap(x, y);}//当x与y不处于同一个深度的时候while(dep[x]dep[y]){//找到距离x为dep[x]-dep[y]的祖先x fa[x][lg[dep[x] - dep[y]] - 1];}//这个时候x和y同深度//如果y就是x的祖先的话//直接返回if(xy){return y;}//如果不是的话//共同向上爬for (int k lg[dep[x] - 1]; ~k;k--){//如果向上跳到的他们的祖先不相同说明还没有合并到同一棵子树上//可以放心地跳到他们对应的祖先上if(fa[x][k]!fa[y][k]){x fa[x][k];y fa[x][k];}}//循环结束以后一定会有fa[x][0]fa[y][0]//这个就是他们的lcareturn fa[x][0]; }
http://www.pierceye.com/news/252172/

相关文章:

  • 东营房地产网站建设wordpress文章关键字替换
  • 网站制作哪里好薇网站建设中最重要的环节是
  • 中山做营销型网站石家庄招投标公共服务平台官网
  • 修改wordpress的站点地址WordPress全屏图
  • 购物网站建设源码wordpress如何更改页脚背景颜色
  • 大型网站开发技术注册网站代码
  • 网站建设管理报告网站建设专家北京注安
  • 免费网站生成软件网站备案中的网站名称
  • 桐庐做网站手机里编辑 Wordpress
  • 外网怎么进入萧山网站优化
  • 做资源下载网站好吗婚恋网站建设公司排名
  • 网站后台管理系统管理员登录wordpress页面模板下载地址
  • 网站用户体验网络科技公司网站制作
  • seo中文全称是什么360搜索怎么做网站自然优化
  • 青岛网站建设技术外包文本资料分享网站 建设
  • 做好网站建设工作wordpress转发微信缩略图
  • 马鞍山网站开发流程设计师免费资源导航
  • 成功的网站不仅仅是优化排视频网站建设应该注意什么
  • 如何制作网站和软件查询关键词密度网站的网址有哪些
  • 网站服务器查询平台贵阳网站改版
  • 怎样查看网站总浏览量寿县有做网站开发的吗
  • 东莞网站建设价格价格网建企业
  • 做播放器电影网站需要多少钱6网络工程师证
  • dw怎么做网站标题图标网站建设进度表 免费下载
  • 西安哪些做网站的公司好做电子商务网站的意义
  • 圣融网站建设包装设计网站是什么样子的
  • 网站建设的利润设计宝
  • 厦门网站制作案例dede做手机网站
  • 网站建设 环保 图片重庆信息网
  • 做网站的主流软件珠海网站建设珠海