专栏文章

[NOIP2025] 树的价值

P14637题解参与者 8已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
6 条
当前快照
1 份
快照标识符
@mimxnkw6
此快照首次捕获于
2025/12/01 17:14
3 个月前
此快照最后确认于
2025/12/01 17:14
3 个月前
查看原文
首先可以考虑 mex\text{mex} 如何刻画,由于 mex\text{mex} 本身是最大化,与问题中 mex\text{mex} 的和的最大化方向相同,所以可以将条件弱化为每一个节点 ii 钦定一个 did_i,使得子树内 [0,di1][0,d_i-1] 均出现过,使得 i=1ndi\sum_{i=1}^{n}d_i 最大化。
如果只考虑对于一个序列 dd 判定合法性,那么这可以被看作一个树上的匹配问题,每次 did_i 首先至少可以达到 maxxson(i)dx\max_{x\in \text{son}(i)}d_x,如果要使得 did_i 取到更大,则每加大 11,需要在子树中选一个未被赋值的节点赋值成现在的 did_i,则 did_i 可以增大 11。直接 dp\text{dp} 匹配可以做到 O(n3)O(n^3)
进一步的,考虑弱化 di=maxxson(i)dxd_i=\max_{x\in son(i)}d_x 再逐步增大的限制,这里的 max\text{max} 与答案的 max\text{max} 方向也是相同的,这相当于钦定一个 xison(i)x_i\in \text{son}(i),让 did_i 取到 dxd_x,然后可以不断通过匹配子树中未被赋值的点赋值来 +1+1
这样对于一个确定的 xx,其构成了一个剖分,对于一次 did_i+1+1,其可以使得 xxxx 所在的链的顶端的 dd11,故这个点对答案产生的贡献为其在链上的深度(即在链剖分中其所在的链中比其小的深度的个数加 11,下文中令 ii 在链上的深度为 cic_i)。那么对于每一个未匹配的点 xx,使其在 maxxson(y)cy\max_{x\in \text{son}(y)}c_y 最大一个产生贡献最优,故仅 dp\text{dp} 链剖分的 cc 并记录每个点到根结点这条路径 cc 的最大值不难做到 O(nm2)O(nm^2)
实际上我们 dp\text{dp} 的问题变成了这样一个结构:根节点 c1=1c_{1}=1,且对于每一个节点 xx,若其不是叶子,则恰好存在一个 yson(x)y\in \text{son}(x) 使得 cy=cx+1c_y=c_x+1,其余儿子的 cc 均为 11。求 i=1nmaxison(j)cj\sum_{i=1}^{n}\max_{i\in \text{son}(j)}c_j 的最大值。一个自然的优化想法是仅对于每个节点 ii,仅dp\text{dp} ei=maxison(j)cje_i=\max_{i\in \text{son}(j)}c_j
现在考虑问题变成了怎样的结构,不难发现实际上对于 eie_i 的取 max\text{max} 可以通过每一次对链的取 max\text{max} 进行。每次将根所在的链对 ccmax\text{max},删除这条链,则其余的子树可以看作若干个子问题,每个子树的根可以看作原问题的根。考虑 dp\text{dp} 这个结构,对于根所在的链对 cc 的取 max\text{max},令链的长度为 ll,目前的根为 rtrt,有两种情况:
1.1.lertl\leq e_{rt},则实际上对于这条链,所有的 eie_i 取到 erte_{rt},取 max\text{max} 没有产生贡献,dp\text{dp} 这样的一个结构即可 O(nm)O(nm)
2.2.l>ertl>e_{rt},则将分为两部分,对于链上 ciertc_i\leq e_{rt} 的节点 iiei=erte_i=e_{rt};对于链上 ci>ertc_i>e_{rt} 的节点 iiei=cie_i=c_i。考虑在 cp=ertc_p=e_{rt} 的点上统计贡献,子树内的结构(即 ci>ertc_i>e_{rt} 的节点)是简单的,可以简单 dp\text{dp} 做到 O(nm)O(nm)。而对于 ci<ertc_i<e_{rt} 的节点,相当于在断掉 pp 到祖先这条链后,除了 pp 子树外的其他子树中根的 ee 取到 erte_{rt} 的会对 dp\text{dp} 的结果产生贡献。这是一个经典的问题(人造情感),在每次 dp\text{dp} 完一个点后,对于每一个以该节点的儿子为根的子树,让该节点儿子为根的其他子树的 dp\text{dp} 对其进行子树加即可,这可以用树状数组快速维护,做到 O(nmlogn)O(nm\log n)
故复杂度可以做到 O(nmlogn)O(nm\log n),可以通过本题。

评论

7 条评论,欢迎与作者交流。

正在加载评论...