JOISC2015 D1T4(?

洛谷专栏

抽象题。

似乎区间修改不是很好做,发现取反有可逆性,考虑差分。

令:\(f_i\) 表示 \(s_i\)\(s_{i-1}\) 是否不同 (\(\tt 0/1\))。

然后区间修改就变为了对 \(f_{l_i}\)\(f_{r_i+1}\) 取反了。

观察得到初始的 \(f\) 有一个性质:只有 \(f_1, f_{a+1}, f_{a+b+1}, \cdots\)\(1\),其余为 \(0\)

\(f_1\)\(1\) 不用管。关键是后面的 \(1\) 要消掉。

发现性质:\(f_x\)\(f_y\) 取反,\(f_y\) 再和 \(f_z\) 取反,相当于 \(f_x\)\(f_z\) 取反。

于是 \(f_{a+1}\)\(f_{a+b+1}\) 取反,相当于 \(f_{a+1}\) 和其他的数取反,其他的数再和 \(f_{a+1}\) 取反。如图。

发现这样很像最短路的节点,考虑求最短路。

具体地,对于每一段 \(l_i, r_i\),考虑连一条连通 \(l_i, r_{i+1}\) 的无向边。

对于 \(f_1, f_{a+1}, f_{a+b+1}, \cdots\) 取反,可以改为 先两两之间取反再算出总代价

由于两两之间取反仅有 \(3\) 种可能,\(f_{a+1}, f_{a+b+1}\)\(f_{a+b+c+1}, f_{a+b+c+d+1}\) 取反,\(f_{a+1},f_{a+b+c+1}\)\(f_{a+b+1},f_{a+b+c+d+1}\) 取反,\(f_{a+1}, f_{a+b+c+d+1}\)\(f_{a+b+1},f_{a+b+c+1}\) 取反。

\(\text{dis}(x,y)\) 代表 \(x\)\(y\) 最短路,只需要求出:

  • \(\text{dis}(a+1,a+b+1)+\text{dis}(a+b+c+1,a+b+c+d+1)\)
  • \(\text{dis}(a+1,a+b+c+1)+\text{dis}(a+b+1,a+b+c+d+1)\)
  • \(\text{dis}(a+1,a+b+c+d+1)+\text{dis}(a+b+1,a+b+c+1)\)

之后求 \(\text{min}\) 即可。使用堆优化 Dijkstra,复杂度 \(O(n \log (a+b+c+d+e))\)

posted @ 2024-04-06 07:41  Cleshm  阅读(17)  评论(0)    收藏  举报