2012年7月14日 星期六

tioj 1697 Problem G 古墨西哥密碼

奸詐的題目,時間卡好緊==


題目特別解析:(普通解析可以看這裡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

沒有留言:

張貼留言