LCA
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
ZOJ2838【LCA在线查询】
模板题。 推荐博文:点我打开链接 博主再啰嗦几句: 储存遍历序列的数组ver[ ]; 每个结点第一次出现的位置的数组 First[ ]; 当前位置的深度的数组 deep[ ] 如果要查询u 和v 的LCA 查询 First[ u ] , First[ v ] 遍历区间深度的最小值 具体实现: 1. DFS一遍,得: 储存遍历的结点:ver[ i原创 2017-04-08 21:42:22 · 822 阅读 · 0 评论 -
CodeForces697C【LCA】
题意:给出一棵以 节点1 为root的完美二叉树, 有两个操作, 1操作,u 到v 上每条边的权值 +w; 2操作,计算u 到v 上的最短路径下的权值;思路:无论是更新还是求值都能看到是对于经过LCA的, 所以对于每个点只需要val[ v ] = weight[ Father[v] - v ]就够了。 无论更新还是查询每次两个节点往上更新就好了,直到遇到LCA。 点最大1e18,层数<5原创 2017-07-13 09:59:36 · 535 阅读 · 0 评论 -
Codeforces Gym-101161E【LCA+主席树】
思路: 在这棵树上,对于每个节点u存一下从根节点(默认为1) 到 u 路径上所有线段出现的次数,那么用主席树维护所有历史信息,然后计算任意两个特定节点u, v的所有线段次数:num[线段树(u)] + num[线段树(v)] - 2 * num[线段树(LCA(u, v))],然后对于每次询问询问主席树就好了,就是求区间中位数了嘛代码来源:http://www.cnblogs.com/fightf原创 2017-08-06 15:12:25 · 472 阅读 · 0 评论 -
HDU2586【LCA在线算法】
ok原创 2017-04-15 21:24:53 · 406 阅读 · 0 评论 -
HDU5044【LCA+差分】
思路: 树以1为根节点,然后向下DFS 两个差分 ADD1 操作,对节点 (u, v) 就是 他们的两个各自节点+w, 然后节点LCA(u, v) - w,LCA(u, v)的父节点-w,然后DFS一遍就能求出来 ADD2 操作就更简单了,边的权值都放在节点上,然后直接在LCA(u, v)上 - 2*w,另外u, v都+w. 但是很卡常数。//#pragma comment(li原创 2017-10-15 12:41:27 · 446 阅读 · 0 评论