bzoj1475 方格取數 網路流最小割

2022-05-20 11:02:29 字數 857 閱讀 3170

題目描述

在乙個n*n的方格裡,每個格仔裡都有乙個正整數。從中取出若干數,使得任意兩個取出的數所在格仔沒有公共邊,且取出的數的總和盡量大。

輸入第一行乙個數n;(n<=30) 接下來n行每行n個數描述乙個方陣

輸出僅乙個數,即最大和

樣例輸入

21 2

3 5樣例輸出6題解

網路流最小割

將原圖黑白染色,分別和源點和匯點連邊,容量為原數;相鄰的點連邊,容量為inf。

答案為sum-mincut。

#include #include #include #define n 1000

#define m 10000

#define inf 0x7fffffff

#define pos(i , j) (i - 1) * n + j

using namespace std;

queueq;

int map[35][35] , head[n] , to[m] , val[m] , next[m] , cnt = 1 , s , t , dis[n];

void add(int x , int y , int z)

bool bfs()}}

return 0;

}int dinic(int x , int low)

}return low - temp;

}int main()

else add(pos(i , j) , t , map[i][j]);}}

while(bfs()) sum -= dinic(s , inf);

printf("%d\n" , sum);

return 0;

}

bzoj 1475 方格取數

在乙個n n的方格裡,每個格仔裡都有乙個正整數。從中取出若干數,使得任意兩個取出的數所在格仔沒有公共邊,且取出的數的總和盡量大。第一行乙個數n n 30 接下來n行每行n個數描述乙個方陣 僅乙個數,即最大和 21 2 3 56 同1324 exca王者之劍。最大流。都一樣。n m的矩形變成n n i...

bzoj1475 方格取數

最小割,這也是個經典題了,當初學最小割時沒學會,這次算是理解了,首先二分圖染色,將整個圖分成黑色點和白色點,由於相鄰的格仔不能同時選,乙個黑點一定對應四個白點,也就是我們只能選擇這個黑點或者四個白點,就再建出乙個超級源點和超級匯點,將每個黑點與超級源點連邊,容量為點權,每個白點與匯點連邊,容量也為點...

BZOJ 1475 方格取數 最小割

在乙個n n的方格裡,每個格仔裡都有乙個正整數。從中取出若干數,使得任意兩個取出的數所在格仔沒有公共邊,且取出的數的總和盡量大。建圖比較巧妙。將方格看成01奇偶矩陣,黑白染色。將s與所有黑點連邊,權為黑點的權值,將所有白點與t連邊,權為白點的權值,相鄰格仔之間從黑點到白點連邊,權為inf。答案就是總...