题解 ABC210F


ABC210F - Coprime Solitaire

原题链接

看到这种两面性问题,显然想到 2-SAT。

给每个质数设置一个集合。(\(2\times 10^6\) 之内的质数有 \(148933\) 个)

先把每一个数字都质因数分解,如果某个数有质因数 \(x_1,x_2...\) ,就把这个数的位置、是正反面,加入 \(x_1,x_2\) 对应的集合中。

这样一个集合中的数都不能同时共存,两两连边 \(\neg X\ \or\ \neg Y\)(即若 \(X\)\(\neg Y\))。

但是这样每个集合要连 \(O(n^2)\) 条边,显然爆炸,于是我们想到前后缀优化连边。

对于每个集合,我们令 \(P_i\) 为前缀的 "\(\neg\)" 连边和,\(Q_i\) 为后缀的 ''\(\neg\)'' 连边和。

则对于此集合的第 \(i\) 位,连边 \(i\to P_{i-1},i\to Q_{i+1}\)

这样每个集合只用连 \(O(n)\) 条边了。

总时间复杂度 \(O(n\log L)\)\(L=\max(A_i,B_i)\)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM