Loading

lldxjw的做题记录

01 Balanced

你需要构造一个长度为 \(n\) 、由 \(01\) 组成的字符串,同时需要满足 \(m\) 个条件。第 \(i\) 个条件由两个整数 \(l_i,\ r_i\) 给出,表示字符串位于 \([l_i,r_i]\) 区间的字符必须是相同数量的 \(0\)\(1\)

请输出满足所有条件且字典序最小的字符串。可以证明在题设条件下总存在至少一个字符串满足所有条件。

\(2\le n\le 10^6,\ 1\le m\le 2\times 10^5,\ 1\le l_i< r_i\le n, (r_i - l_i + 1) \bmod 2,\ (l_i,r_i)\neq(l_j,r_j) (i != j)\)

solution

根据套路,我们把0看成-1,1看成1,做前缀和跑差分约束
限制为

  1. \(|a_{i+1}-a_i|=1\)
  2. \(a_r-a_{l-1}=0\)
    我们将限制1改为 \(|a_{i+1}-a_i|\le 1\)
    因为差分约束自带最大(最小)限制,又因为一定有解,因此不会出现差值为0的情况。
    显然的,跑SPFA复杂度会炸,我们尝试使用01bfs
    要求字典序最小……然后发现边权是-1,丸辣!换做法吧!
    哦等等,我们可以把0看成,1看成-1,然后发现此时边权就是1了,结束。
posted @ 2024-08-30 21:38  班级账号  阅读(28)  评论(0)    收藏  举报