1. 程式人生 > >在二分圖上加一條邊與其逆問題

在二分圖上加一條邊與其逆問題

dfs序 error 快的 http 也會 二分圖 集合 log 差分

二分圖定義:https://en.wikipedia.org/wiki/Bipartite_graph

考慮正問題,二分圖的一個充要條件是圖中所有的環都是偶環 * 。

  從而加的邊只能形成一個偶環,我們可以將二分圖黑白染色,分為兩個集合,這樣合法邊只有兩種

    1.橫跨兩個聯通快的邊。

    2.在一個聯通塊且兩個端點異色的邊。

  這顯然是正確的,求有多少個這樣的邊,分上面兩種情況進行分類即可,時間復雜度 O(n)。

接下來考慮逆問題,如何在圖上刪除一條邊使得這個圖變成二分圖。

  如果這個圖本來就是二分圖,刪一條邊不會使得 * 性質消失,從而任意刪一條邊即可。

  而如果這個圖本來不是二分圖,那麽同理必然存在至少一個奇環,我刪的邊必然要在這些奇環的交上。

  考慮將這個圖dfs出一棵樹,進行黑白染色,對於所有的非樹邊,如果接在同色點上,(記作error邊),說明這條邊是在一條奇環上面

    1.刪非樹邊,如果這樣的邊只有一個,那麽說明只要我們刪去這條邊顯然可行,而如果有多個的話,此策略顯然不能找出任何一條合法邊。

    2.刪樹邊,首先由上面的結論知,刪的邊必然要在,所有error邊兩個端點的樹上路徑交上。除此之外,我們可以發現一個奇環與一個與之有交的偶環也會形成一個奇環,所以我們刪的樹邊顯然不能在某個非error樹邊兩個端點的樹上路徑上,不然無法消除此非error樹邊與其他奇環構成的奇環。

  綜上,考慮樹上差分將路徑加改為子樹加,並且應用dfs序即可。

    

在二分圖上加一條邊與其逆問題