題解 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