倍增LCA模板
来源:互联网 发布:灵格斯mac版 编辑:程序博客网 时间:2024/06/06 02:27
void dfs(int u) { int i; for(i=head[u];i!=-1;i=next[i]) { if (!deep[to[i]]) { deep[to[i]] = deep[u]+1; p[to[i]][0] = u; //p[x][0]保存x的父节点为u; dfs(to[i]); } } }void init() { int i,j; //p[i][j]表示i结点的第2^j祖先 for(j=1;(1<<j)<=n;j++) for(i=1;i<=n;i++) if(p[i][j-1]!=-1) p[i][j]=p[p[i][j-1]][j-1]; //i的第2^j祖先就是i的第2^(j-1)祖先的第2^(j-1)祖先 }int lca(int a,int b) {//最近公共祖先 int i,j; if(deep[a]<deep[b])swap(a,b); for(i=0;(1<<i)<=deep[a];i++); i--; for(j=i;j>=0;j--) //使a,b两点的深度相同 if(deep[a]-(1<<j)>=deep[b]) a=p[a][j]; if(a==b)return a; for(j=i;j>=0;j--) { if(p[a][j]!=-1&&p[a][j]!=p[b][j]) { a=p[a][j]; b=p[b][j]; } } return p[a][0]; }
阅读全文
0 0
- LCA倍增算法(模板)
- 倍增lca模板
- LCA倍增法模板
- 倍增LCA模板
- LCA倍增模板
- 倍增LCA 模板
- lca倍增算法模板
- {模板}LCA倍增
- LCA模板(倍增)
- 倍增LCA模板
- 倍增LCA模板
- 倍增LCA模板
- [模板]倍增LCA
- hdu2586 倍增lca模板
- 倍增感受,以及lca倍增模板
- 倍增求LCA的模板
- 倍增法求lca 模板
- LCA之倍增算法模板
- JS数据结构之---数组
- 框架学习之springMVC整合框架-01基础、访问servletAPI、json
- Java面向对象-类与对象以及内存图解
- Birthday Paradox ||生日悖论
- LeetCode练习-动态规划算法-word-break
- 倍增LCA模板
- CSU
- Java中.getClass()和.class的区别
- Java设计模式学习07——桥接模式
- 排序算法---希尔排序(Shell Sort)
- Get方法中文传递参数乱码
- 神经网络与深度学习 1.3 神经网络的架构 1.4 一个简单的分类手写数字的网络架构
- 杭电 OJ 1219 AC Me
- TensorFlow使用说明