UOJ contest【候选队互测2022】部分题解

D1T1 毛估估就行

我的想法是选若干个点当关键点 bfs,使得对于其他的所有点都可以找到一个距离 \(\le 1\) 的关键点,直接用关键点的距离当答案。每次询问 \(O(1)\)

然而这种询问复杂度不平衡的就应该去想一想将预处理复杂度和询问复杂度平衡。

\(B\) 个关键点 bfs,每次选 deg 最大的点。

如果 \(u\to v\) 最短路经过了一个关键点或者关键点连着的点,可以直接求 \(\min_x \{d_{u,x}+d_{v,x}\}\).

删掉关键点和关键点连着的点,如果不经过,那一定在剩下的连通块里,可以对剩余的每个点运行 bfs. 由于剩余的度数一定 \(\le n/B\) 所以复杂度较小。

D1T2 理论复杂度

nb映射题。[gu]

容易列出一个生成函数: \(F_r = \displaystyle \sum_{i\ge 0} x^{ri}(\prod_{j=1}^i \frac{1}{1-x^j})^2\)

D1T3 广为人知题

考虑暴力怎么做:

在 SAM 上走 \([ql,qr]\) 这个串。走到节点 \(u\) 时,答案加上 fail 树上所有祖先的 size \([1]\);加上当前这个节点中,串长比它 \(\le\) 的关键串个数 \([2]\)

考虑把 SAM 的 DAG 进行重剖,可以使得每次走,走过 DAG 的 \(\log(n^2)\) 条重链。

在每条重链上挂询问,考虑统计答案:

对于 \([1]\) 部分:对每个节点求 \(sum(u)\) 表示所有 fail 祖先的贡献和,可以前缀和;

对于 \([2]\) 部分:相当于两个限制条件,(设 \(x\) 为某个关键串)\(x\) 在链上编号 \([L,R]\) 的节点中;\(len_{x}\le nowlen=id_x+tmp\) ;可以扫描线二维数点统计。

关于这个剖分:设 \(f_u\) 为从 \(u\) 开始的路径数量,设 \(g_u\)\(u\) 为结尾的路径数量。找到 \(u\) 的后继 \(son_u\) ,使得:\(f_son\)\(u\) 的后继中 \(f\) 最大的,\(g_u\)\(g_son\) 前驱中 \(g\) 最大的。

真的难写。

讲个笑话:我扫描线部分细节写错了,重构了一遍又把细节写错了。

D2T1 枪打出头鸟

会了线性基求交就会了。

前缀线性基的交只会变化 \(\log V\) 次。可以求出这些变化的节点。

考虑在查询时 query 出拼出这个数需要的最小时间点。

D2T2 伟大 NIT 的贸易计划

被数数题打爆了。

相当于要计数在一个环上填数的方案数,考虑填满这个环的话,需要满足的条件是:

\(1\le a_i\le m,a_i+k\ge a_{i+1},a_n+k\ge a_1\)

对于后面 \(\ge\) 的条件,考虑容斥,钦定某些位置上必须填 \(<\) ,其他位置任意。

这样就变成了环上的若干 \(<\) 段。一个长度为 \(i\)\(<\) 段插板法得方案数 \(\dbinom{m-(i-1)k}{i}\)

这样就可以 DP 了,我们先定 \(1\) 后面的位置不填 \(<\) ,然后 DP ,最后方案数乘上 \(1\) 所在小于号段的长度。

发现这个 DP 是个常系数齐次线性递推,就做完了。

D2T3 可爱多的字符串

\(w_i=1\) 的部分竟然是 CF1098F。

不可做题,鸽子了

posted @ 2022-01-10 15:05  Rainbow_qwq  阅读(498)  评论(0编辑  收藏  举报