AtCoder Beginner Contest 277
E - Crystal Switches
经典分层图。
搞两层图,一层对应初始状态,一层对应开了奇数次开关后的状态;假设点 \(v\) 处有开关,就在两层图中 \(v\) 对应的点间连一条边。
然后就是最短路板子了。
F - Sorting a Matrix
\(0\) 可以变成任何数,所以可以忽略。
观察:不管怎么变换,原本同一行的数还会在同一行,原本同一列的数还会在同一列。
推论1:忽略 \(0\),各行的值域不能相交,否则无解。
推论2:忽略 \(0\),假设在某一行上,第 \(x\) 列的数大于第 \(y\) 列上的数。那么对于每一行,第 \(x\) 列的数大于第 \(y\) 列上的数都要成立,否则无解。
对于推论1,就扫一遍排个序的事情。
对于推论2,若第 \(x\) 列的数大于第 \(y\) 列上的数,就连一条有向边 \(x \to y\)。如果建出来的图没有环,则说明没有冲突,满足条件。
但是可能会有相等的元素,所以要做到把所有的关系都考虑到的话就只能暴力枚举,这样会被卡超时。
假设某一行上的数从小到达可以划分为 \(b_1, b_1, \dots, b_1, b_2, b_2, \dots, b_2, \dots, b_k, b_k, \dots, b_k\),那么可以虚拟出值为 \(\frac{b_i + b_{i + 1}}{2}\) 的点 \(x\),然后 \(x\) 向所有值为 \(b_i\) 的点连边,所有值为 \(b_{i + 1}\) 的点向 \(x\) 连边。这样就可以排序 \(O(n \log n)\) 代替 \(O(n^2)\) 枚举。易得这样的点至多有 \(O(nm)\) 个,在能接受的范围之内。
然后就是拓扑排序搞有向图判环。
G - Random Walk to Millionaire
参考kmjp's blog。
维护以下几个状态:
- \(p(i, u)\):操作 \(i\) 次过后位于 \(u\) 的概率。
- \(dp1(i, u)\):操作 \(i\) 次过后位于 \(u\) 的期望等级 乘上 \(p(i, u)\) 。
- \(dp2(i, u)\):操作 \(i\) 次过后位于 \(u\) 的期望等级的平方之和 乘上 \(p(i, u)\)。
那么 满足 \(c_u = 1\)的\(dp2(i, u)\) 之和就是答案。
转移的时候,就枚举每一条边 \(u \to v\),\(p(i - 1, u)\)可以转移到 \(p(i, v)\),\(dp1\) 和 \(dp2\) 类似。
如果 \(c_v = 0\) ,新增的 \(v\) 对 \(dp1(i, v)\) 还会有 \(p(i, v)\) 的贡献,对 \(dp2(i, v)\) 还会有 \(2 \times dp1(i, v) + p(i, v)\) 的贡献。
后者是因为\((E(X + Y))^2 = (E(X) + E(Y))^2\),即linearity of expectation。
Ex - Constrained Sums
CF1697F,不能说一模一样,只能说完全相同。