博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树上倍增LCA模版
阅读量:5145 次
发布时间:2019-06-13

本文共 788 字,大约阅读时间需要 2 分钟。

 

void dfs(int u){    for(int i = head[u];i!=-1;i = edge.next){        int to = dege[i].to;        if(to == p[u][0])           continue;        d[to] = d[u]+1;        dis[to] = dis[u]+edge[i].w;        p[to][0] = u;        dfs((to));    }}void init(){    for(int j = 1;(1<
<=n;j++) for(int i = 1;(1<
<=n;i++){ p[i][j] = p[p[i][j-1]][j-1]; }}int lca(int a,int b){ if(d[a]>d[b]) swap(a,b);//b在下面; int f = d[b]-d[a];//f是高度差; for(int i = 0;(1<
<=f;i++) if(((1<
=0;i--) if(p[a][i]!= p[b][i])//从最大的祖先开始,判断a,b的祖先是否相同 a = p[a][i],b = p[b][i];//如果不相同,a和b同时向上移动2^j a = p[a][0]; } return a;}

 

转载于:https://www.cnblogs.com/syx-799/p/5782794.html

你可能感兴趣的文章
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
35. Search Insert Position(C++)
查看>>
ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面
查看>>
python_day1
查看>>
【转】vim中多标签和多窗口的使用
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
chrome 禁止自动更新
查看>>
一些php文件函数
查看>>
std::min error C2059: 语法错误:“::” 的解决方法
查看>>
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
查看>>
「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
查看>>
jQuery 给div绑定单击事件
查看>>
Exceptionless 生产部署笔记
查看>>
有关快速幂取模
查看>>
转 ObjExporter Unity3d导出场景地图寻路
查看>>
Linux运维必备工具
查看>>
Ubuntu配置ssh及vnc
查看>>
Kinect学习(3)Kinect for Windows SDK资料下载
查看>>
Java入门——第七天
查看>>
HTML5 Audio时代的MIDI音乐文件播放
查看>>