CF1615G Maximum Adjacent Pairs
调了挺久才过,有点小寄。
因为是对着带花树找题的,所以默认一般图最大匹配了。
显然只需要考虑极长连续 \(0\) 段的最左边和最右边,而且应该和奇偶性有关,不妨分类讨论:
- 长度为奇数:设长度为 \(2k+1\) ,则段内一定可以匹配出 \(k\) 个任意选取的二元组,并且多出来一个和左右两边配对,且这样最优。因为如果左右两边各和一个配对那么就拆掉了一个任意选取的二元组,这是不优的。因此新建一个虚电 \(t\),连接 \((t,x)\) 和 \((t,y)\),表示 \(t\) 只能被 \((x,y)\) 中匹配一个。
- 长度为偶数:设长度为 \(2k\),则段内可以匹配出 \(k\) 个任意的二元组,但是如果左右两边都匹配,就可以出 \(k+1\) 对。则我们将 \((x,y)\) 之间连接一条边,代表如果这两个之间匹配了,那么可以拆一个任意匹配,多出来两对匹配。
点数 \(O(n)\) 边数 \(O(n)\) 直接带花树显然会寄,我们并没有用到题目中给的 \(A\leq 600\) 的性质。这个性质代表有效匹配最多只有 \(A\) 对,即有效点数只有 \(O(A)\) 个。
点数的来源是长度为奇数的情况。但是长度为奇数的情况两端点可以无压力地匹配至少一个,因此一个联通块中只需要联通块大小个虚点就能全部匹配,这个过程用并查集维护,可以将点数降低到 \(O(A)\) 的,时间复杂度就是 \(O(An\log A)\) 的了。

浙公网安备 33010602011771号