ARC106

C(构造)

萌萌题,WA 了两发啊!

发现 Takahashi 的算法是对的。那造一个区间里面包含了 \(m+1\) 个区间就好了。注意无解和 \(m=0\) 的情况。

D(数学,推式子)

这种题就是专门来骗我的/oh/oh

思路

这种两个 \(\sum\) 第一眼肯定是递推啊。设 \(f(i,k)\) 表示前 \(i\) 个指数为 \(k\) 的答案。假设 \(f(i,k)=f(i-1,k)+g(i,k)\),然后发现 \(g(i,k)\) 可以卷积求!这样就 \(O(nk\log k)\) 了,非常优秀!

正解

\[k!\sum_{t=0}^k \sum_{i=1}^n\frac{a_i^t}{t!}\sum_{j=1}^n \frac{a_j^{k-t}}{(k-t)!} \]

暴力卷积 \(O(nk+k^2)\)

总结

感觉我在做推式题的时候脑子没有那么清醒。这个题给我的两个警醒是:

  • 推式子少花里胡哨!老老实实做恒等变换!
  • 搜不出来做法的时候赶紧回溯!

E(最小割、二分)

想到流就不难了。

思路

首先观察到上界是 \(2nk\),开始想给这个东西钦定一个优先级然后状压 DP,但是后面发现这个东西既不满足最优子结构又不好转移,然后弃掉了。

仍然考虑在值域上 DP,但是状态定义和转移都不是很清晰,再次弃掉。

发现这个东西很像一个匹配模型。二分答案是显然的,问题就转化为了判断一个 \(x+n\) 个点的图,第 \(i\) 个人向他工作的日期连边,判断是否满流。直接跑最大流是不可行的,考虑它的对偶问题——最小割问题。假设左部不割的点集是 \(S\),那么右部 \(\cup_{x\in S}N(x)\) 都要割掉。那么原问题相当于判定对于所有 \(S\)\(|\cup_{x\in S}N(x)|\leq k|S|\)。可以预处理第 \(x\) 天不工作的人然后二分的时候高维前缀和。时间复杂度是 \(O(nk+(n2^n+n)\log (nk))\)

正解

正解给出的解释是 Hall 定理,这说明了 Hall 定理实际上可以用最大流-最小割定理来解释。

总结

匹配模型真的非常常见。

最大流问题可以对偶到最小割。(称它们俩为对偶问题应该不过分)

F(prufer 序列)

神秘魔改 prufer 序列。

思路

答案是这个东西:

\[[\frac{x^{n-2}}{(n-2)!}]\prod_{i=1}^n\sum_{j=0}\frac{\binom{d_i}{j+1}}{j!}x^j \]

不知道能不能算。

正解

仍然是 prufer 序列的双射方式,不过魔改了。

考虑把 prufer 序列的元素改成边,或者说往里面存两个洞。更具体地,假如 \((u,i)\)\((v,j)\) 之间有一条边,那么 prufer 序列中对应的元素就是 \(((u,i),(v,j))\)。显然这个序列和原树是双射的。那么计数这个序列就好了。我们只需要限制每个 part 在 first 里面只出现一次和每个 hole 在 second 里面至多出现一次即可。所以答案是:

\[\prod_{i=1}^n d_i \times (\sum_{i=1}^n d_i-n)^{\underline{n-2}} \]

总结

prufer 序列代表了一类与生成树有关的组合对象的双射方法。

posted @ 2022-07-29 09:31  yllcm  阅读(52)  评论(0)    收藏  举报