题目
在一个有 m ∗ n m*n m∗n个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。
分析
匈牙利算法做二分图匹配,是OK的,但是网络流更高效,按奇偶性建图,再建立源点和汇点,分别连接,跑一遍最大流。
代码
#include <cstdio>
#include <cctype>
#include <queue>
using namespace std;
struct node{
int y,next,w;}e[60001];
const int dx[4]={
0,0,1,-1},dy[4]={
1,-1,0,0};
int k=1,n,m,ans,s,t,ls[10001],dis[10001];
int in(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while