DTOJ 4866. string

題意

有一個長度爲 nn 的01串 SS,有些位置被 ?'?' 替代表示未知,有 qq 組限制:

每組限制形如 a,b,la,b,l ,表示 S[a,a+l1]=S[b,b+l1]S[a,a+l-1]=S[b,b+l-1]

求滿足限制的情況下字典序最小的 SS

數據點編號 n,qn,q 特殊性質
1 20\le 20
2 20\le 20
3 200\le 200
4 2000\le 2000
5 2000\le 2000
6 2000\le 2000
7 106\le 10^6 所有的 ll 之和小於等於 10610^6
8 106\le 10^6 所有的 ll 之和小於等於 10610^6
9 2×1042 \times \le 10^4
10 3×1043 \times \le 10^4
11 3×1043 \times \le 10^4
12 4×1044 \times \le 10^4
13 6×1046 \times \le 10^4
14 10510^5
15 2×1052 \times 10^5
16 3×1053 \times 10^5
17 4×1054 \times 10^5
18 5×1055 \times 10^5
19 6×1056 \times 10^5
20 7×1057 \times 10^5
21 8×1058 \times 10^5
22 9×1059 \times 10^5
23 10610^6
24 10610^6
25 10610^6

題解

首先有比較顯然的暴力做法:把相同的位置用並查集連起來,一個連通塊如果有1就是1,否則就是0。

其實應該要想到分塊:每個限制分爲零散的點之間的限制和塊之間的限制,對點和塊分別維護並查集,同一個集合的相互或一下即可,效率O(nn)O(n \sqrt n)

在此基礎上考慮倍增,把每個限制拆成log個長度爲2的次冪的塊分別連邊,按照塊長從大到小在並查集內依次去連,並把連通性下放到下一層,這樣就可以把所有限制下放到單個點,效率O(nlog2n)O(nlog^{2}n)

又發現連邊關係不需要不重,故直接像RMQ那樣連邊即可,效率O(nlogn)O(nlogn)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章