本題是HDU 1565的加強版
題目描述:n*m的矩陣,每個位置都有一個正數,一開始你的分數是0,當你取走一個數字時,你的分數增加那個分數。如果你取完數字後,新出現了2個相鄰的都是空的格子,那麼你的分數減少2* ( x & y),x,y是那兩個格子的原始數值。
同時有一些附加條件,有一些格子的數字是必須拿走的。
解題報告:
首先,這種相鄰格子的問題都會想到它是一個二分圖:
橫縱坐標為偶數的在左邊,橫縱坐標為奇數的在右邊。
構圖如下:
一個超級原點,和左邊的點相連接,容量是其權值。
一個超級匯點,右邊的點和其連接,容量是其權值。
如果左邊的點x和右邊的點y相鄰,連接x,y容量為2 * (x & y)
這樣的圖的最小割的定義是:
一個完整的取數過程中的最小花費。
左邊的點x和原點連接表示選x,不連接(切斷,割)表示不選x,代價就是x的權值。同理右邊的點也是。
如果左邊的x和原點連接,右邊的y和匯點連接,那麼滿足割的定義,xy之間如果有邊,一定要切斷,代價就是2 * (x& y)。
同時,為了滿足一定要取一些點的附加條件,只要讓那些點和對應的原點或者匯點容量為無窮大就可以了,這樣割一定不會割那條無窮大。