奸詐的題目,時間卡好緊==
題目特別解析:(普通解析可以看這裡XDD)
1. 找出 2L~2R 的質數表
2. 以1.的bool表建出一個有向圖(如果x then y成立,則由x連到y)
//簡單的部份到這裡為止
3. 這時你想要解的是:
找出A~B,使得可以在剛剛的有向圖中以<=K條路徑覆蓋A~B所有點
4. 但你只會算『在一個有向圖中最少要幾條簡單路徑覆蓋所有點』
(這裡要使用的技巧是二分圖匹配,而要解決這個問題,只需要把每一個點拆成入點和出點即可且入點和出點無任何關係,以此做最大匹配(x),所求的答案便是n-x,原因的話是因為沒有被匹配到的點,象徵著簡單路徑的終點(二分圖左半邊)和起點(二分圖右半邊))
5. 所以你便想用枚舉的方式,但發現時間複雜度O(V*V*V*E),TLE。這時,你發現可以用雙指針,而且可以將他放入二分圖匹配的步驟之中,瞬間將時間複雜度將為O(V*E)。
6. 最重要的一件事!在Bipartite的時候要從G[p].size()-1~0,不能反過來喔,原因應該跟機率有關,不討論了,但極重要,不這樣寫100%TLE。
code: http://codepad.org/a7gksiSK
沒有留言:
張貼留言