#include <iostream>
#include <string.h>
using namespace std;
const int MAXN = 200 + 10;
const int INF = 0xfffffff;
struct Edge
{
int v, w, next;
}edge[MAXN * MAXN * 4];
int e, head[MAXN * MAXN / 2];
int cur[MAXN * MAXN / 2];
int temp[MAXN][MAXN];
int s, t, n, m;
int dis[MAXN * MAXN / 2];
void add(int u, int v, int w)
{
edge[e].v = v;
edge[e].w = w;
edge[e].next = head[u];
head[u] = e++;
edge[e].v = u;
edge[e].w = 0;
edge[e].next = head[v];
head[v] = e++;
}
void init()
{
e = 0;
memset(head, -1, sizeof(head));
}
int q[MAXN * MAXN / 2];
bool bfs()
{
memset(dis, 0, sizeof(dis));
dis[s] = 1;
int heads, tail;
heads = tail = 0;
q[tail++] = s;
while (heads != tail)
{
int curs = q[heads++];
for (int i = head[curs]; i != -1; i = edge[i].next)
{
int v = edge[i].v;
if (dis[v] == 0 && edge[i].w)
{
dis[v] = dis[curs] + 1;
q[tail++] = v;
if (v == t)
{
return true;
}
}
}
}
return false;
}
int dfs(int u, int f)
{
if (u == t || f == 0)
{
return f;
}
int flow = 0;
for (int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].v;
if (dis[v] == dis[u] + 1 && edge[i].w)
{
int t = min(edge[i].w, f - flow);
int inc = dfs(v, t);
flow += inc;
edge[i].w -= inc;
edge[i ^ 1].w += inc;
if (!(f - flow))
{
break;
}
}
}
if (!flow)
{
dis[u] = -1;
}
return flow;
}
int dinic()
{
int Maxflow = 0;
while (bfs())
{
Maxflow += dfs(s, INF);
}
return Maxflow;
}
void input()
{
while (cin >> n >> m)
{
init();
int sum = 0;
s = 0, t = n * m + 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> temp[i][j];
sum += temp[i][j];
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if ((i + j) % 2 == 0)
{
add(s, (i - 1) * m + j, temp[i][j]);
if (i > 1)
{
add((i - 1) * m + j, (i - 2) * m + j, INF);
}
if (j > 1)
{
add((i - 1) * m + j, (i - 1) * m + j - 1, INF);
}
if (i < n)
{
add((i - 1) * m + j, i * m + j, INF);
}
if (j < m)
{
add((i - 1) * m + j, (i - 1) * m + j + 1, INF);
}
}
else
{
add((i - 1) * m + j, t, temp[i][j]);
}
}
}
cout << sum - dinic() << endl;
}
}
int main()
{
input();
return 0;
}
hdu1565 hdu1569 方格取数 最小割
最新推荐文章于 2019-06-26 14:26:30 发布