AtCoder Beginner Contest 277 (F,G,Ex)

之前没细想过 OSU 那个题,被 G 薄纱,F 也没写完,输麻了

懒得放链接,代码可以直接去 AtCoder 上搜。ID: YunQianQwQ

F

首先求出每列的最大最小值,然后依此排序,如果出现 insertion 即 \(l_1\le l_2<r_1\le r_2\) 这种情况就直接 No

然后只需要考虑两行能否同时交换排成有序。设这两行分别是 \(A_{1\cdots m},B_{1\cdots m}\),我们发现如果有 \(i,j\) 满足 \(A_i>A_j\)\(B_i<B_j\) 就可以直接无解。

进一步,我们发现一行中的一个 \(A_i>A_j\) 意味着第 \(i\) 列要在第 \(j\) 列前面,因此考虑从 \(i\)\(j\) 连有向边。最终的图中,如果出现环则无解。

直接暴力连边肯定不行,不过很常见的思路是我们排序,然后只在相邻的数值之间连边。

但存在相等的情况,如果有 \(x\)\(1\)\(y\)\(2\),我们要连出来 \(x\times y\) 条边,场上因为这个降智了想了很久,甚至一度以为解法错了。。。实际上只需要建个虚点就完事了。。。

具体来说对于每一段相等的连续段我们建个虚点 \(u\),然后让所有连续段中的 \(i\) 连边 \(i\to u\),并让 \(u\) 连向所有下一个连续段的 \(j\) 即可。

\(0\) 怎么处理呢?其实可以不用管,最终如果 \(0\) 不存在时可行,那么加上 \(0\) 一定可行。我们只需要在不存在 \(0\) 时确定的方案中把 \(0\) 安排成对应连续段即可。

G

按照一般的期望 DP 倒推方式,显然可以设 \(f(u,j,k)\) 表示从 \(u\) 开始走,当前的 level 为 \(j\),还要走 \(k\) 步,的期望分数。这样转移非常 ez,但是复杂度为 \(O((N+M)K^2)\)

然后我们发现 level 和前面的东西相关,因此考虑正推,下面翻译一下 user editorial

维护 \(p(u,i)\) 表示 \(i\) 步之后走到 \(u\) 的概率,\(f_1(u,i)\) 表示 \(i\) 步之后停留在 \(u\) 的前提下,level 的期望值,\(f_2(u,i)\) 表示 \(i\) 步之后停留在 \(u\) 的前提下,设 level 为 \(X\),那么 \(f_2(u,i)=\mathbb{E}(X^2)\)

那么

\[p(u,i)=\sum_{(v,u)\in E}\dfrac{p(v,i-1)}{\text{deg}(v)} \]

原因显然。同理有

\[f_1(u,i)=\sum_{(v,u)\in E}\frac{p(v,i-1)}{\deg(v)}\times f_1(v,i)+[c_u=0] \]

然后 \(f_2\) 的转移稍微复杂一点,有

\[f_2(u,i)=\begin{cases}\sum_{(v,u)\in E}\frac{p(v,i-1)}{\text{deg}(v)}\times f_2(v,i)&,c_u=1\\\sum_{(v,u)\in E}\frac{p(v,i-1)}{\text{deg}(v)}\times (f_2(v,i)+2f_1(v,i)+1)&,c_u=0\end{cases} \]

这是因为 \(c_u=0\) 的时候 level 会加一,而 \(\mathbb{E}((X+1)^2)=\mathbb{E}(X^2)+2\times \mathbb{E}(x)+1\)

答案就是

\[\sum_{i=1}^k\sum_{c_v=1}f_2(v,i)\times p(v,i) \]

于是就 \(O((N+M)K)\) 做完了。

然而倒推其实是可以做的,我们需要提前考虑贡献:设 \(f_{0/1/2}(u,i)\) 表示从 \(u\) 开始走 \(i\) 步,初始 level 为 \(0\),但是每次遇到 \(c_v=1\) 的点时,若 \(\text{level}=X\),计算的贡献是 \(X^0/X^1/X^2\) 时的期望分数。

转移的时候,如果遇到 \(c_u=1\) 的点,由于初始 level 是 \(0\),可以直接由 \(\frac{1}{\text{deg}(u)}\sum_{(u,v)\in E}f_2(v,i-1)\) 转移

如果遇到 \(c_u=0\) 的点,我们在这里考虑后面所有点的权值变化

发现后面会有 \(f_0(u,i)\) 次计算权值,每一次都从 \(X^2\) 变成了 \((X+1)^2\),增加量为 \(2X+1\)

因此期望的增加量恰好就是 \(2f_1+f_0\),有

\[f_2(u,i)=\sum_{(u,v)\in E}\dfrac{1}{\text{deg}(u)}\times (f_2(v,i-1)+2f_1(v,i-1)+f_0(v,i-1)) \]

类似可以转移 \(f_1,f_0\),同时我们发现该做法可以轻易扩展到次幂为任意 \(w\) 的情形,复杂度要多一个 \(O(w^2)\)

思考一下,如果是 \(w\) 次幂,那么

\[f_w(u,i)=\sum_{(u,v)\in E}\dfrac{1}{\text{deg}(u)}\times\sum_{j=0}^w\binom{w}{j}f_j(v,i-1) \]

发现系数是组合数,可以卷积。。。因此可以做到 \(O((N+M)K\times w\log w)\)

official editorial 貌似使用了组合意义,懒得翻译了,实现上完全一致

Ex

这是 cf 之前一场 Edu 出过的题目。。我还打过那场。。。

注意值域 \([0,M]\) 很小,考虑拆出来 \(N\times (M+1)\) 个点,用变量 \(p_{i,j}\) 表示 \(X_i\ge j\) 是否成立。

那么约束以 \(X_{A_i}+X_{B_i}\le R_i\) 为例,我们对每个 \(j=0,1,\cdots,M\),如果 \(X_{A_i}\ge j\) 成立,那么必须要有 \(X_{B_i}\le R_i-j\) 成立,即 \(X_{B_i}\ge R_i-j+1\) 不成立。

类似地可以连出 \(L_i\) 的边。然后再连边 \(p_{i,j}\to p_{i,j-1}\) 表示如果 \(X_i\ge j\) 则有 \(X_i\ge j-1\)

最后跑个 2sat 就完事了,复杂度 \(O((N+Q)M)\)

posted @ 2022-11-14 18:08  云浅知处  阅读(139)  评论(2编辑  收藏  举报