首页 > 其他分享 >P4211 [LNOI2014] LCA 题解

P4211 [LNOI2014] LCA 题解

时间:2024-03-16 17:23:18浏览次数:30  
标签:sz 祖先 题解 线段 LNOI2014 算法 P4211 LCA 节点

link

切入这道题,首先要思考所有 LCA 的分布特征。显然,对于任意 \(\text{LCA}(i, j)\),都满足 LCA 是 \(i, j\) 的祖先。那么对于一个询问,可以找到所有 \(i \in [l, r]\) 的祖先,还可以找所有 \(z\) 的祖先。明显,找 \(z\) 的祖先会方便很多:它们都分布在 \(z\) 到根节点的那条链上,这应该会更方便统计,可以用 LCT、树链剖分之类的算法。所以我们从 \(z\) 的祖先着手切入。

先研究任意一个 \(z\) 的祖先 \(x\),试着求出它作为 LCA 时对答案的贡献。

image

明显,当研究 \(x\) 这棵树时,和 \(z\) 不在一棵子树中的所有节点 \(i\),都满足 \(\text{LCA}(i, z) = x\)。(可能说得比较模糊,反正就是图中 1, 6 节点可以和 \(z\) 有 LCA = x,而节点 3, 5 则不行。)

设 \(x\) 子树中所有节点,满足编号在 \([l, r]\) 间,数量 \(sz(x)\);并且令 \(z\) 在的那棵子树为 \(Z\)。则易得 \(x\) 对答案的贡献为:\(dep(x)*[sz(x)-sz(Z)]\)。

然后,为了快速统计 \(sz(x)\),我当时想出了一个算法:可持久化线段树。可持久化线段树中以每个点的编号为下标。

然而,这个算法仅能对 \(z\) 的祖先们进行逐个计算,而不能实现最终的目的:拓展到链的整体操作上。

于是想:能不能把可持久化线段树去掉?想到离线 + 差分。

把每一个询问拆开,拆成 \(r, z\) 和 \(l-1, z\),

标签:sz,祖先,题解,线段,LNOI2014,算法,P4211,LCA,节点
From: https://www.cnblogs.com/David-Mercury/p/18077273

相关文章

  • 邻接表存储带权的无向图(c++题解)
    题目描述给出一个无向带权图,顶点数为n,边数为m。输入格式第一行两个整数n,m,接下来有m行,每行3个整数u,v,w,表示点u到点v有一条边,边权为w。输出格式第i行输出第点i的所有邻接点,按照点i到该点的边权由小到大输出,如果边权相等,则按照点的编号有小到大输出。样例样例输入复......
  • 有向图的DFS(c++题解)
    题目描述给定一个有向图(不一定连通),有N个顶点,M条边,顶点从1..N依次编号,求出字典序最小的深度优先搜索顺序。输入格式第1行:2个整数,N(1≤N≤200)和M(2≤M≤5000)接下来M行,每行2个整数I,J,描述一条边从顶点I指向顶点J输出格式仅一行,一个顶点编号序列,表示字典序最小的深度优先搜索......
  • 首师大附中集训D6日报(20231215)-题解部分
    T1是dp设fi0不含k的情况书fi1含k的情况数第一步优化:前缀和维护f两个数组的前缀和通过前缀转移第二步优化:发现前缀和能矩阵乘法优化,所以矩阵快速幂就可以说起来挺简单,式子也不算难推,但就特别难写,主要的难度在于设置矩阵上面T2不知怎么一直卡在35,但是打的总体上肯......
  • 矿场搭建 题解
    题目描述煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。请写一个程序,用来计......
  • nodejs打包问题解决实例
    node命令集合npmsetregistryhttps://registry.npm.taobao.org/npmconfigsetregistryhttps://registry.npmjs.org/npmconfigsetsass_binary_sitehttps://npm.taobao.org/mirrors/node-sass/npmgetregistry //npm安装包的提示操作目录权限不足npmconfigsetu......
  • CF1948F 题解
    对于每个询问,可以把这\(r-l+1\)个袋子包合并成一个有\(\sum\limits_{i=l}^ra_i\)个金币和\(\sum\limits_{i=l}^rb_i\)个银币的袋子。\([l,r]\)外的袋子同理也可以这样合并。假设\(sum_a=\sum\limits_{i=1}^na_i,sum_b=\sum\limits_{i=1}^nb_i\),\(......
  • CF145C Lucky Subsequence 题解
    首先,我们对这个幸运数进行分析,发现:\(10^9\)以内只有\(1023\)个幸运数,即\(\sum\limits_{i=0}^92^i\)个。考虑对幸运数和非幸运数分类讨论。幸运数部分:01背包裸题,\(dp_{i,j}\)表示前\(i\)个幸运数里选了\(j\)个,转移方程为\(dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\tim......
  • [HNOI2012] 矿场搭建 题解
    [HNOI2012]矿场搭建前置知识:#Tarjan求点双连通分量题目大意​ 给你一张无向连通图,任意删去其中一个点,要求在删点后在每个连通块中有一个点被选择,问至少需要选择多少个点,以及选择的方案数。输入输出格式输入​ 多组数据以\(N=0\)结束​ 每组数据第一行为边的数量\(N\(N......
  • NOI2021 轻重边 题解
    NOI2021轻重边题目链接:#4812.[NOI2021]轻重边前置知识:#树链剖分#线段树题目大意给定\(n\)个点组成的树,\(m\)次操作。修改操作会让路径\(a\tob\)上的所有点的所有连边对答案的贡献变为\(0\),路径\(a\tob\)的所有边的贡献变为\(1\);查询操作则统计路径\(a\tob\)的......
  • CF57C Array 题解
    发现单调不降序列反过来就是单调不增序列,只需考虑单调不降序列即可。假如将问题转化为:初始为\(1\),一共有\(n+1\)个位置,有\(n-1\)次增加答案的机会,每个位置可以拥有多次增加答案的机会,问一共有多少种可能性。显然答案为\(C_{2n-1}^{n-1}\)。所以总体答案为\(2C_{2n-1}^{n-......