首页 > TAG信息列表 > LNOI2014
P4211 [LNOI2014]LCA
P4211 [LNOI2014]LCA 分析 本题要计算的就是l~r与z的LCA的深度之和 我们来看看,是否可以将求多个dep转化一下 我们先对dep有一个理解,dep就是从i到root总共有多少点 我们从整体上考虑,发现对于一个询问:l , r , z 来说,所有的 lca 都在 z 到根的路径上。从而有一些点,它们对很多的 lcaLuoguP4211 [LNOI2014]LCA 题解
P4211 LNOI2014 LCA 题解 题目链接 快快乐乐的切掉,开开心心的抄题解 总是做不出来这种题 思路一旦清奇,我就懵逼 首先转化,深度其实就是到根节点的节点数 于是我们想把\([l,r]\)这些点到根节点的路径都加一 然后\(z\)直接统计路径和 于是发现不可做,但是可以用\([1,r]\)的减去\([1,l-[LNOI2014]LCA T18 D71
[LNOI2014]LCA T18 D71 [ LNOI2014]LCA 树剖+前缀和思维 思路: lca(i,z)的深度就是i相当于i到根节点的路径上权值加1,z到根节点的路径上的权值和 对于 l<=i<=r ,将所有的i到根节点路径权值加1,考虑前缀和,那么答案就是ans[r]-ans[l-1]; 参考代码 #include<bits/stdc++.h> #incl洛谷 P4211 [LNOI2014]LCA(树剖+线段树,差分)
传送门 解题思路 调了一晚上。。紫题果然不是我现在能做的。。 首先考虑如何把多个deep的和转化成可以快速求出来的东西: 我们可以对于每个[l,r],把每个点到根节点的路径上的点权++(初始为0),这样对于每个询问(l,r,z),答案即为z到根节点的路径上的点权和。-----操作1 但是对于每个询问都P4211 [LNOI2014]LCA
如果出现某些询问一堆东西的和的时候(如LCA的深度和),我们可以考虑不要把这些东西每一个都全部求出来,而应该考虑合并这些询问然后一次性询问他们的和。(例如用树剖转化为区间加和和区间询问) 具体思路见hzw博客 #include<iostream> #include<cstdio> #include<cstring> #include<algori[LNOI2014]LCA
转: [LNOI2014]LCA Link Description (q) 次询问,每次给定 (l,r,z) ,求 [sum_{i=l}^r dep[Lca(i,z)] ]Solution 如果不转换一下的话,应该是相当不好求。可以这样想,求两点 u 和 v 的 lca 的深度,其实就是求 u 和 v 到根的路径的交的大小。那么可以对其中一个点,修改其到根节点路径上的值,[LNOI2014] LCA(树链剖分+主席树+标记永久化)
题意 给一棵 n n n 个点的树,有 m m m 次询问,每次询问给出 l[LNOI2014]LCA
Link Description \(q\) 次询问,每次给定 \(l,r,z\) ,求 \[\sum_{i=l}^r dep[Lca(i,z)] \]Solution 如果不转换一下的话,应该是相当不好求。可以这样想,求两点 u 和 v 的 lca 的深度,其实就是求 u 和 v 到根的路径的交的大小。那么可以对其中一个点,修改其到根节点路径上的值,都加一。然