题目互讲 个人题解
DE_aemmprty · · 个人记录
CF1383E Strange Operation
\mathbf{Question. 1}
容易猜到是根据答案序列的某种性质进行计数,那有什么性质?
::::info[
- 操作
00 / 10 / 01 就相当于将一个0 的连续块长度减一。如果这个连续块长度为0 ,就将两边的连续块合并。 - 操作
11 相当于将一个1 的连续块长度减一(前提是操作前长度大于1 )
但这里的合并操作(将两个连续块合并)使得这个看起来很复杂。考虑换一种刻画方式,我们设最终的序列
对于一个串
- 操作
00 / 10 / 01 就相当于将一个a_i > 0 的a_i 减一。 - 操作
11 相当于将一个不在首尾的a_i = 0 删掉,把两个相邻的1 变成一个1 。
我么先计算开始和结束的那两个
假设初始为
\mathbf{Question. 2}
我们需要加条件,使得我们可以通过
::::info[
我们直接从左往右扫
这样,我们可以保证每个
\mathbf{Question. 3}
是否存在多项式复杂度的计数方法?
::::info[
设与
因此,
注意
\mathbf{Question. 4}
能否对这个 DP 进行优化?
::::info[
考虑单调栈,我们在加入
转移是普通的,时间复杂度
CF1383F Special Edges
\mathbf{Question. 1}
我们能否不考虑特殊边的边权去跑最大流?
:::info[
首先可以把最大流转化成最小割。
如果我们想不考虑特殊边的边权,那我们可以考虑直接枚举这些边在最小割中是否选择。
:::
\mathbf{Question. 2}
现在,我们只需要考虑如何对于网络流,固定某条边是否选 / 不选即可。但我们要让边权尽量小,否则网络流无法通过。
:::info[
首先,一种很显然的方法是将必选的边视为
我们考虑将不选的边权视为
:::
\mathbf{Question. 3}
如何优化?
:::info[
注意到边权很小,所以我们考虑使用 FF 算法(一种基于流量的网络流算法)。
我们考虑先对不选边的情况跑一遍网络流,求出剩下来的残余网络。然后,我们要找到一个枚举二进制数的顺序,使得每次改变的量尽量小。
考虑格雷码,相邻两个格雷码只会差一个二进制位。因此,就有
:::
CF1268D Invertation in Tournament
不会,回家补,先记几个结论。
:::warning[
:::warning[