博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lca转RMQ
阅读量:5132 次
发布时间:2019-06-13

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

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 const int N = 100000; 6 7 /* 8 lca 转RMQ 9 10 询问u和v的lca 11 我们保存树的遍历序列,那么只要在序列中找到第一次出现u和第一次出现v的位置 12 然后RMQ该区间深度最小的那个点就是u和v的lca了 13 14 那么要保存每个点首次出现的位置 15 还要保存遍历序列的dep序列,然后RMQ dep序列得到哪一位置的dep最小 16 然后映射为结点 17 */ 18 19 vector
g[N]; 20 int total; 21 int id[N]; 22 int dep[N]; 23 int ref[N]; 24 int dp[N][30]; 25 int pos[N][30]; 26 void dfs(int u, int fa, int d) 27 { 28 id[u] = ++total; 29 dep[total] = d;//去 30 ref[total] = u; 31 for(int i=0;i
id[v]) 65 swap(u,v); 66 int L = id[u]; 67 int R = id[v]; 68 int k = 0; 69 while(1<<(k+1)<=R-L+1)k++; 70 int a = dp[L][k]; 71 int b = dp[R-(1<

 

转载于:https://www.cnblogs.com/justPassBy/p/4836604.html

你可能感兴趣的文章
Bootstrap
查看>>
Node.js 连接 MySQL
查看>>
ACM-ICPC 2018 world final A题 Catch the Plane
查看>>
那些年,那些书
查看>>
面向对象六大基本原则的理解
查看>>
注解小结
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
精读《useEffect 完全指南》
查看>>
SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
查看>>
DrawerLayout实现双向侧滑
查看>>
MySQL入门很简单-触发器
查看>>
LVM快照(snapshot)备份
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>
数论四大定理
查看>>
npm 常用指令
查看>>
20几个正则常用正则表达式
查看>>