24題 方格取數問題 網路流

2021-08-22 16:09:09 字數 993 閱讀 9449

在乙個有 n×m

n\times m

n×m 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。

這道題明顯是乙個二分圖。我們可以把每個點染色,將i+j

i+ji+

j為偶數的點連向t

tt,否則連向s

ss。那麼對於每乙個連s

ss的白點,將它連向它周圍的四個黑點,容量為inf

infin

f。跑一邊最大流即可。

#include

#include

#include

#include

#define inf 0x7f

#define inf 1e9

using

namespace std;

int n,m,s,t,x,y,k,head[

200001

],dep[

200001

],ans,sum,num;

struct edge

e[200001];

void

add(

int from,

int to,

int c)

bool

bfs()}

}return dep[t]

}int

dfs(

int u,

int low)}}

return0;

}//以上為最大流模板

intmain()

else

//白點

if(i//連下面的黑點

if(j>1)

//連左邊的黑點

if(j//連右邊的黑點}}

while

(bfs()

)printf

("%d\n"

,num-ans)

;return0;

}

網路流24題 方格取數問題

題面 傳送門思路 相鄰的點不能同時取,那麼在這個圖中,實際上分了兩種格仔,每種格仔相互之間隨便取 那麼就是二分圖了 把相鄰的點之間連邊,得到乙個二分圖,我們實際上就是要求這個圖的帶權最大獨立集 於是這道題轉化為二分圖問題,而二分圖中最大獨立集等於全集減去最小點覆蓋,最小點覆蓋等於這個圖的最大匹配 都...

網路流24題 方格取數問題

在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。第1 行有2 個正整數m和n,分別表示棋盤的行數和列數。接下來的m行,每行有n個...

網路流24題 方格取數問題

題目鏈結 有乙個 m 行 n 列的方格圖,每個方格中都有乙個正整數。現要從方格中取數,使任意兩個數所在方格沒有公共邊,且取出的數的總和最大,請求出最大的和。第一行是兩個用空格隔開的整數,分別代表方格圖的行數 m 和列數 n 第 2 到第 m 1 m 1 行,每行 n 個整數,第 i 1 i 1 行的...