Loading

【题解】UOJ NOI Round #5 Day1

// created on 22.09.24

A. 提问系统

首先建树,考虑 \(p_rp_b^2\) 的组合意义可以考虑记二元组 \((0/1,0/1/2)\) 表示选择的个数。

那么令 \(f_{u,k,S}\) 表示 \(u\) 的祖先链选了 \(k\)R 时,子树内部方案的状态对应 \(S\) 的方案数。转移可以通过枚举 \(u\) 的决策,然后考虑其儿子 \(S\) 的合并即可。复杂度 \(O(n^2)\)

感觉没必要写代码。

B. 答案查重

最开始看错题了 ..

无根树同构的套路是选出重心为根,令 \(f_i(x)\) 表示 \(i\) 的答案。注意到如果子树不重构那么有 \(f_u(x)=(1+x)\prod f_v(x)\) 。对于重构的子树,因为只有在全 \(0\) 的时候才存在完全相等的方案,因此剩下的方案都是不同的,只需要注意顺序。计算时只需要枚举非 \(0\) 子树个数,即 \(\sum\limits_{i=0}^{k}\frac{(f_v(x)-1)^i}{i!}\),可以分治解决。

处理这种子树合并就用常规套路:先链分治一下,我们钦定一个点的重儿子为 \(v\),当且仅当 \(v\) 子树大小超过儿子子树大小总和的一半。注意此时 \(v\) 肯定不与其他儿子重构。那么先用堆,每次取最小的合并其他子树,然后对于重链,再用堆全部合并。

提交记录:Submission #585069 - Universal Online Judge (uoj.ac)

C. 排名预测

特殊性质 B,我们还是考虑 Check 一个 ddm 序是否合法:考虑剥叶子,如果有点是从兄弟枝干换过来,那么一定无解。否则一定有解,且删掉叶子后剩下的点 ddm 序相对大小保持不变。

特殊性质 A,相当于判定一个 ddm 序是否合法。我们考虑经典 Trick:将排列转成 0 / 1 序列,对每个分界点分别判定。对于某个 0 / 1 序列来说,每次交换肯定是 0 往下走,1 往上走。我们只需要在每个点判定:如果这个点子树中的目标 0 小于已有 0,那么肯定无解。否则考察祖先链上的 0 是否足够补充(其实没必要,因为每个 0 的补充去向是确定的)。

至此我们拿到 75pts 。接着我们考虑一个构造方法:如果能确定一个点儿子的最优遍历方式,就能得到这个点子树的最优方案。令 \(f_x\) 表示 \(x\) 的 ddm 序至少应该是多少才有解,叶子的初始值很简单,转移显然从小到大排序最优。

我们最后得到的做法极其简单,而其正确性(单调性)是基于转成 0 / 1 序列的部分分做法的。

提交记录:Submission #585109 - Universal Online Judge (uoj.ac)

posted @ 2022-09-26 14:27  Qiuly  阅读(83)  评论(0编辑  收藏  举报