首页 > 其他分享 >P5311 [Ynoi2011] 成都七中

P5311 [Ynoi2011] 成都七中

时间:2023-11-29 20:22:26浏览次数:33  
标签:rt 一个点 log 七中 Ynoi2011 询问 分治 mathcal P5311

我永远喜欢数据结构。

题目传送门

  • 给出 \(n\) 个点的树,点有颜色 \(a_i\)。有 \(q\) 次询问,每次询问给出 \(l,r,x\),求保留 \([l,r]\) 范围内的节点时,\(x\) 所在联通块中有多少种本质不同的颜色。询问之间相互独立。

  • 保留一个点的定义是,将这个点以及与其相邻的边全部删除。

  • \(n,q\le 10^5\)。

  • \(1.00\,\text{s}\,/\,250.00\,\text{MB}\)。

lxl 难得不卡常。

一句话题解:转化,离线。

记 \((l,r,x)\) 为一个询问,\(S_{x,[l,r]}\) 为 \(x\) 能够通过 \([l,r]\) 内的点走到的点的集合。询问本质上是对 \(S_{x,[l,r]}\) 数颜色。

我们发现若 \(y\in S_{x,[l,r]}\),则询问 \((l,r,x)\) 等价于 \((l,r,y)\)。因为若 \(x\) 能走到一个点 \(u\),那么 \(y\) 也可以通过 \(x\) 到达点 \(u\),反之亦然。其实就是此时 \(S_{x,[l,r]}=S_{y,[l,r]}\)。

考虑点分治,设当前分治重心为 \(rt\)。考虑对于当前子树内部一个点上未被处理的 \((l,r,x)\) 的询问,若 \(rt\in S_{x,[l,r]}\),则可以考虑求解 \((l,r,rt)\) 的答案。

可以证明对于任意一个点一定存在一个这样的 \(\boldsymbol{rt}\)。

注意到此时 \(\boldsymbol{S_{rt,[l,r]}}\) 中的点全部在当前子树中。
若不在,则 \(x\) 一定和上层分治重心通过 \([l,r]\) 内的点联通,本层就不会再处理这个询问。

于是维护 \(mxe_u\) 和 \(mne_u\) 表示 \(u\) 到 \(rt\) 的路径上最大 / 最小的点。那么对于一个颜色 \(c\),它对这个答案有贡献,当且仅当存在一个点 \(v\) 使得 \(a_v=c\),且 \(l\le mne_v\le mxe_v\le r\)。

这是个二维数点问题,考虑将所有询问和 \((mne_v,mxe_v)\) 点对按照第一维从大到小排序,从大到小扫描。扫到一个询问时,上述条件可以转化为当前有多少种颜色的最小 \(mxe_v\) 值不超过 \(r\)。用树状数组维护即可。

一个点在 \(\mathcal{O}(\log n)\) 层分治中,每层扫到一次,单次复杂度为 \(\mathcal{O}(n\log n)\)。一个询问会在 \(\mathcal{O}(\log n)\) 层分治中被扫到,仅会在一层分治中回答,复杂度为 \(\mathcal{O}(\log n)\)。

综上,时间复杂度为 \(\mathcal{O}(n\log^2 n+q\log n)\),空间复杂度为 \(\mathcal{O}(n+q)\)。

提交记录(\(\color{white}\colorbox{limegreen} {Accepted}\) \(\color{limegreen} \bf 100\),\(\bf 139\,\text{ms}\,/\,16.94\,\text{MB}\)) 代码

标签:rt,一个点,log,七中,Ynoi2011,询问,分治,mathcal,P5311
From: https://www.cnblogs.com/MnZnOIerLzy/p/17865760.html

相关文章

  • P5309 [Ynoi2011] 初始化
    题目传送门本来不想写这道\(shabi\)卡肠题的,但还是写了。分块+根号分治。考虑对\(x\)的大小分类讨论:若\(x>=\sqrt{n}\),很明显最多只会加\(\sqrt{n}\)次,暴力加即可,用分块维护每个块内的\(sum\),查询就直接散块加上整块即可。若\(x<\sqrt{n}\),考虑累加\(x,y\)相同的......
  • 「Ynoi2011」成都七中
    「Ynoi2011」成都七中题意:询问\(([l,r],x)\),表示将树中编号在\([l,r]\)内的所有节点保留,求\(x\)所在连通块中颜色种类数可以转化为从\(x\)出发且只经过节点范围在\([l,r]\)的路径上的颜色种类数,是路径问题且多次询问,所以可以考虑点分树但是可以发现,一个节点的答案可......
  • 成都七中 解题报告
    点分树有这么一个性质:你总能找到一个点,使得原树中这个点所在的连通块在这个点的子树内(如果整棵树没有被破坏,这个点就是根节点)。这个结论过于显然,证明只有一句话:点分树上的......
  • Ynoi2011题解
    d1t1初始化题意一个长度为\(n\)的序列,\(q\)次操作。询问\([l,r]\)的区间和。将所有\(\bmodx=y\)的下标位置加\(z\)。\(n,q\leq2\times10^5\)。题解......
  • P5309 [Ynoi2011] 初始化
    P5309[Ynoi2011]初始化考虑暴力,模拟题意,时间复杂度竟是\(O(\frac{n^2}{x})\),那么对于\(x\ge\sqrt{n}\)的修改就可以暴力了,这不是根号分治吗。再去考虑\(x<\sqrt{n}......
  • 从 Ynoi2011 初始化 看卡常
    一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确。但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的......
  • [Ynoi2011] 成都七中
    linkSolution不是分块的Ynoi。/jk我们注意到树上一个连通块一定存在一个节点使得连通块里面所有节点都在它子树内。点分树同理。那么对于一次查询\((l,r,x)\),我们可以......
  • luogu P5311 [Ynoi2011] 成都七中
    题面传送门首先考虑暴力怎么做。按照UNRD2T2找到每个联通块最高点的套路,我们可以找到每个询问点的祖先中,这个点到祖先路径上的点全部位于\([l,r]\)区间中的最浅的祖先,那么......