清华集训2017做题记录
已完成
未完成
Orz \(\text{pinkex}\) 早就切穿清华集训,遥遥领先。
【清华集训2017】榕树之心
先判断最后能否到 \(1\) 怎么做,考虑每一个节点不同儿子子树的两次操作会相互抵消,显然移回当前节点剩下最少操作的方案一定是剩下若干来自最大儿子子树的点,那么只需要尽可能消除最大儿子子树即可。
令 \(tot[u]\) 表示从 \(u\) 子树内从 \(u\) 出发最后回到 \(u\) ,最少剩余的生长操作数量。
\[
\begin{cases}
tot[u] = sz[u] \bmod 2, & sz[u]-sz[v]-1 \geq tot[v]+1 \\
tot[u]=tot[v]+1-(sz[u]-tot[v]-1), &otherwise
\end{cases}
\]
其中 \(v\) 是 \(u\) 的所有儿子中子树大小最大的那个,考虑如果最大儿子内部消完剩下的东西可以直接用其它儿子的子树消掉,那么答案就是 \(sz[u] \bmod 2\) ,否则每一个其它儿子子树内的点都能和最大儿子剩下的东西消一下,直接减即可。
考虑一次性要求所有点的可行性怎么做,考虑在移到 \(u\) 时当前已经完成的操作一定是 \(1-u\) 的路径以及路径上挂着的一些子树,事实上一定存在一种策略可以让这些挂着的子树互相消除,那么问题就转化成和判断 \(1\) 的可行性类似的问题,把 \(1-x\) 路压缩起来当做新根即可。
【清华集训2017】某位歌姬的故事
首先对于覆盖一个位置的所有限制,只需要取最小的那个即可,然后所有限制的位置都不交了,分别计算方案数相乘即可。
那么问题就转化为若干个位置可以放黑白两种颜色的球,要求每一个限制区间里面必须有一个黑球,求方案数。其中一个白球有 \(m_i-1\) 种方案。
假设对第 \(k\) 种限制计算,令 \(dp(i,j)\) 为前 \(i\) 个位置最后一个黑球放在 \(j\) 的方案数,维护一下每一个位置对应的限制最左边的黑球可以放在哪里,记为 \(lim[i]\) 。
\[
dp(i,j)=dp(i-1,j)\times (m_k-1)^{size_i} \ (lim[i]\leq j < i)\\
dp(i,i)=\sum dp(i-1,j)\times(m_k^{sizei}-(m_k-1)^{size_i})
\]