题意
有一个长度为 n n n 的01串 S S S,有些位置被 ′ ? ′ '?' ′?′ 替代表示未知,有 q q q 组限制:
每组限制形如 a , b , l a,b,l a,b,l ,表示 S [ a , a + l − 1 ] = S [ b , b + l − 1 ] S[a,a+l-1]=S[b,b+l-1] S[a,a+l−1]=S[b,b+l−1]。
求满足限制的情况下字典序最小的 S S S 。
数据点编号 | n , q n,q n,q | 特殊性质 |
---|---|---|
1 | ≤ 20 \le 20 ≤20 | 无 |
2 | ≤ 20 \le 20 ≤20 | 无 |
3 | ≤ 200 \le 200 ≤200 | 无 |
4 | ≤ 2000 \le 2000 ≤2000 | 无 |
5 | ≤ 2000 \le 2000 ≤2000 | 无 |
6 | ≤ 2000 \le 2000 ≤2000 | 无 |
7 | ≤ 1 0 6 \le 10^6 ≤106 | 所有的 l l l 之和小于等于 1 0 6 10^6 106 |
8 | ≤ 1 0 6 \le 10^6 ≤106 | 所有的 l l l 之和小于等于 1 0 6 10^6 106 |
9 | 2 × ≤ 1 0 4 2 \times \le 10^4 2×≤104 | 无 |
10 | 3 × ≤ 1 0 4 3 \times \le 10^4 3×≤104 | 无 |
11 | 3 × ≤ 1 0 4 3 \times \le 10^4 3×≤104 | 无 |
12 | 4 × ≤ 1 0 4 4 \times \le 10^4 4×≤104 | 无 |
13 | 6 × ≤ 1 0 4 6 \times \le 10^4 6×≤104 | 无 |
14 | 1 0 5 10^5 105 | 无 |
15 | 2 × 1 0 5 2 \times 10^5 2×105 | 无 |
16 | 3 × 1 0 5 3 \times 10^5 3×105 | 无 |
17 | 4 × 1 0 5 4 \times 10^5 4×105 | 无 |
18 | 5 × 1 0 5 5 \times 10^5 5×105 | 无 |
19 | 6 × 1 0 5 6 \times 10^5 6×105 | 无 |
20 | 7 × 1 0 5 7 \times 10^5 7×105 | 无 |
21 | 8 × 1 0 5 8 \times 10^5 8×105 | 无 |
22 | 9 × 1 0 5 9 \times 10^5 9×105 | 无 |
23 | 1 0 6 10^6 106 | 无 |
24 | 1 0 6 10^6 106 | 无 |
25 | 1 0 6 10^6 106 | 无 |
题解
首先有比较显然的暴力做法:把相同的位置用并查集连起来,一个连通块如果有1就是1,否则就是0。
其实应该要想到分块:每个限制分为零散的点之间的限制和块之间的限制,对点和块分别维护并查集,同一个集合的相互或一下即可,效率 O ( n n ) O(n \sqrt n) O(nn)。
在此基础上考虑倍增,把每个限制拆成log个长度为2的次幂的块分别连边,按照块长从大到小在并查集内依次去连,并把连通性下放到下一层,这样就可以把所有限制下放到单个点,效率 O ( n l o g 2 n ) O(nlog^{2}n) O(nlog2n)。
又发现连边关系不需要不重,故直接像RMQ那样连边即可,效率 O ( n l o g n ) O(nlogn) O(nlogn)。