倍增LCA模板
来源:互联网 发布:国航网上值机软件 编辑:程序博客网 时间:2024/06/05 10:46
const int M = 20;struct node{int v, value, next;}p[maxn << 1];int len, head[maxn], dis[maxn], depth[maxn], n, m, father[maxn][25];void addedge(int u, int v, int value){p[len].v = v;p[len].value = value;p[len].next = head[u];head[u] = len++;}void dfs(int x, int fa){father[x][0] = fa;for (int i = head[x]; ~i; i = p[i].next){if (p[i].v == fa)continue;dis[p[i].v] = dis[x] + p[i].value;depth[p[i].v] = depth[x] + 1;dfs(p[i].v, x);}}void presolve(){dis[1] = depth[1] = 0;dfs(1, 0);for (int i = 1; i < M; i++) for (int j = 1; j <= n; j++) father[j][i] = father[father[j][i - 1]][i - 1]; }int lca(int x, int y){if (depth[x] != depth[y]){if (depth[x] > depth[y])swap(x, y);int distant = depth[y] - depth[x];for (int i = 0; i < M; i++){if (distant&(1 << i))y = father[y][i];}}if (x == y)return x;for (int i = M; i >= 0; i--){if (father[x][i] != father[y][i]){x = father[x][i];y = father[y][i];}}return father[x][0];}int query(int x, int y){return dis[x] + dis[y] - (dis[lca(x, y)] << 1);}
阅读全文
0 0
- LCA倍增算法(模板)
- 倍增lca模板
- LCA倍增法模板
- 倍增LCA模板
- LCA倍增模板
- 倍增LCA 模板
- lca倍增算法模板
- {模板}LCA倍增
- LCA模板(倍增)
- 倍增LCA模板
- 倍增LCA模板
- 倍增LCA模板
- [模板]倍增LCA
- hdu2586 倍增lca模板
- 倍增感受,以及lca倍增模板
- 倍增求LCA的模板
- 倍增法求lca 模板
- LCA之倍增算法模板
- erase方法+erase(lob,amount,offset)+使用erase方法
- Caffe 深度学习框架上手教程
- extern关键字的使用
- Let the Balloon Rise
- ZOJ 2588 Burning Bridges
- 倍增LCA模板
- ##报错:DrawerLayout must be measured with MeasureSpec.EXACTLY.
- ssm整合:
- LiteIDE中漂亮的几款QSS
- mybatis快速入门
- 中间缓存变量机制 i++
- javascript开发:javascript基础知识点
- 数据压缩实验五——JPEG原理分析及JPEG解码器的调试
- php小代码