ABC210F - Coprime Solitaire
看到这种两面性问题,显然想到 2-SAT。
给每个质数设置一个集合。((2 imes 10^6) 之内的质数有 (148933) 个)
先把每一个数字都质因数分解,如果某个数有质因数 (x_1,x_2...) ,就把这个数的位置、是正反面,加入 (x_1,x_2) 对应的集合中。
这样一个集合中的数都不能同时共存,两两连边 ( eg X or eg Y)(即若 (X) 则 ( eg Y))。
但是这样每个集合要连 (O(n^2)) 条边,显然爆炸,于是我们想到前后缀优化连边。
对于每个集合,我们令 (P_i) 为前缀的 "( eg)" 连边和,(Q_i) 为后缀的 ''( eg)'' 连边和。
则对于此集合的第 (i) 位,连边 (i o P_{i-1},i o Q_{i+1})。
这样每个集合只用连 (O(n)) 条边了。
总时间复杂度 (O(nlog L)),(L=max(A_i,B_i))。