做题记录 26.4.9
\(\textcolor{black}\odot\) CF1408H Rainbow Triples
设 \(0\) 在 \(p_{1\sim l}\),显然答案的一个上界为 \(\lceil\frac l2\rceil\)
每个 \(>0\) 的数前后一定有一侧数量超过 \(\lceil\frac l2\rceil\),只需考虑一侧
设 \([1,L]\) 中的 \(>0\) 的数左侧 \(0\) 数量 \(\le \lceil\frac l2\rceil\),\([R,n]\) 中右侧 \(0\) 数量 \(\le \lceil\frac l2\rceil\)
每种颜色可以匹配 \(0\) 一段前缀(\([1,L]\) 中最后一次出现的前一个 \(0\))和一段后缀(\([R,n]\) 中第一次出现的下一个 \(0\))
若答案 \(\ge M\),则必然选择前 \(M\) 个 \(0\) 和后 \(M\) 个 \(0\),合法当且仅当这一范围中颜色的最大匹配至少为 \(M\)
显然实际匹配的一定是一段前缀 \(0\) 和一段后缀 \(0\),因此无需考虑匹配 \(0\) 的位置的约束,问题转化为整张图上颜色的最大匹配
先尽量在左侧匹配,过多则选择右侧能匹配长度最大的反悔,最后尝试在右侧匹配即可
时间复杂度 \(O(n\log n)\)
\(\textcolor{purple}\odot\) P7916 [CSP-S 2021] 交通规划
容易建模为网络流最小割,求出对偶图后转化为最短路
\(O(nm\log nm\times \sum k)\) 求出所有关键点对之间的最短路,然后 \(O(\sum k^3)\) \(dp\) 即可
时间复杂度 \(O(nm\log nm\times \sum k+\sum k^3)\)
\(\textcolor{black}\odot\) CF1895G Two Characters, Two Colors
用集合划分模型建图,源点向 \(1\) 的点连 \(r_i\),向 \(0\) 的点连 \(b_i\),\(1\) 的点向汇点连 \(b_i\),\(0\) 的点连 \(r_i\),前面的 \(1\) 向后面的 \(0\) 连 \(1\) 的边,答案为 \(\sum r+\sum b\) 减去最小割
转最大流优化之,预先流 \(\min(a_i,b_i)\)
对于 \(a_i\le b_i\) 的点,若为 \(1\) 则 \(S\to i\) 满流,\(i\to T\) 无法接受其它流量,为 \(0\) 同理,从而可以删去这样的 \((a_i,b_i)\)
接下来 \(a_i>b_i\) 的,若为 \(1\) 则可以向后提供 \(a_i-b_i\),若为 \(0\) 则可以从前面接受 \(a_i-b_i\)
从左往右扫描,若为 \(1\) 则插入一个 \(a_i-b_i\),若为 \(0\) 则取出最大的 \(a_i-b_i\) 个(忽略 \(0\))都减去 \(1\) 并计入最大流
容易平衡树优化到 \(O(n\log n)\)
\(\textcolor{black}\odot\) CF1368H1 Breadboard Capacity (easy version)
容易变为最大流,然后转化为最小割,对于一组割,令和源相连为红,和汇相连的为汇,则可证最优情况下每行都同色,或每列都同色
\(dp\) 是容易的,时间复杂度 \(O(n+m)\)
\(\textcolor{black}\odot\) CF1368H2 Breadboard Capacity (hard version)
在 CF1368H1 Breadboard Capacity (easy version) 基础上矩阵优化即可
时间复杂度 \(O(n+q\log n)\),常数极大

浙公网安备 33010602011771号