
LCA
柒月 流火
菜
展开
-
Nearest Common Ancestors POJ - 1330 LCA (树上倍增模板)
这是一道模板题树上倍增的写法和应用#include<cstdio>#include<cstring>#include<cmath>#include<queue>using namespace std;const int maxn=10010;vector<int>g[maxn];int fa[maxn][15]; ...原创 2018-10-26 15:54:51 · 219 阅读 · 0 评论 -
ZOJ - 3195 Design the city LCA(倍增) 求树上三点之间最短距离
ZOJ - 3195 Design the city题意:有 n 个地区,n-1条(带权)街道,m条查询,求三点之间的最短距离此题的地区从 0 开始编号思路:两点之间的距离公式为:dis[x] + dis[y] - 2*dis[lca(x,y)]先两两求 lca,求出深度最大的那个了 lca ,然后将 剩余的那个点与求出深度最大的 lca 所在点再求 lca,套两次公式...原创 2019-04-20 10:25:09 · 1127 阅读 · 0 评论 -
hdu 4547 CD操作 LCA倍增算法
hdu 4547 CD操作 在CD操作中,向下操作:x点能 1 步到达所有以 x 点为根节点的子树中的所有节点向上操作:只能一步一步向上查找父节点(一次只能走一个点)思路:找出两点的最近公共祖先,判断要变成的点是否为最近公共祖先,不是就加 1 ,否则直接输出#include<iostream>#include<algorithm>#inclu...原创 2019-04-20 09:02:23 · 181 阅读 · 0 评论 -
POJ 1986 Distance Queries 倍增求LCA 树上两点之间任意距离
POJ 1986 Distance Queries 题意:有 n 个点,给你 m 条无向边和距离(方向可以忽略),求两点之间的距离由于题目没说,所以不必考虑不连通的情况这道题的题意感觉很迷思路:用 dis 保存点到根节点的距离,两点之间的距离为 dis[x] + dis[y] - 2*dis[lca(x,y)] ;一开始把 head[u] 写成 head[cnt]...原创 2019-04-19 21:28:37 · 607 阅读 · 0 评论 -
POJ - 3417 Network LCA(倍增)+树上差分(关于边)
POJ - 3417 Network 树上差分讲解题意;给你一棵树,原来有 n-1 条边,有 m 条新加的边,求删除一条旧的边和一条新的边将树最少分成两部分 有多少种分法思路:思路转自:https://www.cnblogs.com/lsgjcya/p/9247167.html事实上我们考虑,每多加一条非树边,在不重的情况下,树上都会多出一个环。考虑断掉某条树边:1...原创 2019-04-19 19:39:50 · 234 阅读 · 0 评论 -
SPOJ - COT Count on a tree LCA+主席树 树上路径求第K大模板题
SPOJ - COT Count on a tree 题意:给出一棵树,每个点都自己的权重,然后给出树上的边,要求从节点 u 到节点 v 路径上的第 k 小的权重的大小。因为权重可能很大,所以需要离散化思路:在树上建主席树每个点建一棵权值线段树,记录从这个点到根的路径上的点权信息。u可以和fa[u]的线段树共用很多信息,所以上主席树!那么 u 到 v 路径上的点权信息,...原创 2019-04-22 09:17:34 · 170 阅读 · 0 评论 -
HYSBZ - 2588 Count on a tree LCA+主席树 树上路径求第K大
HYSBZ - 2588 Count on a tree给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor(异或)lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。Input第一行两个整数N,M。第二行有N个整数,其中第i个整数表示点i的权值。后面N-1行每行两个整数(x...原创 2019-04-22 09:09:38 · 164 阅读 · 0 评论 -
How far away ? HDU - 2586 LCA (树上倍增详解)
a,b两点间的距离为 dis[a]+dis[b]-2*dis[lca(a,b)] ,dis为到根节点的距离#include<cstdio>#include<cstring>#include<cmath>#include<queue>using namespace std;const int maxn=40010;struct nod...原创 2018-10-26 21:19:50 · 237 阅读 · 0 评论 -
Lowest Common Ancestor SPOJ - LCA LCA 树上倍增
一道模板题讲解请看 https://blog.youkuaiyun.com/qq_41837216/article/details/83416270#include<cstdio>#include<cstring>#include<cmath>#include<queue>using namespace std;const int maxn=...原创 2018-10-26 16:34:27 · 172 阅读 · 0 评论 -
HDU - 2874 Connections between cities (并查集)判断是否存在LCA
HDU - 2874 Connections between cities题意:有n个点,m条带权无向边,q条询问。对每次询问判断两点是否存在LCA,存在输出最短距离,否则输出Not connected 。思路:用并查集判断是否存在LCA(x,y)距离公式:dis[x] + dis[y] - 2*dis[lca(x,y)]#include<iostrea...原创 2019-04-20 11:13:12 · 155 阅读 · 0 评论