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,做前缀和跑差分约束
限制为
- \(|a_{i+1}-a_i|=1\)
- \(a_r-a_{l-1}=0\)
我们将限制1改为 \(|a_{i+1}-a_i|\le 1\)
因为差分约束自带最大(最小)限制,又因为一定有解,因此不会出现差值为0的情况。
显然的,跑SPFA复杂度会炸,我们尝试使用01bfs
要求字典序最小……然后发现边权是-1,丸辣!换做法吧!
哦等等,我们可以把0看成,1看成-1,然后发现此时边权就是1了,结束。