题目链接

网络流直接最大流就是了,只是要拆点小心一个点的流超出了原本的正常范围才是。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = , maxE = 3e4 + , st = ;
int N, D, M, all, head[], cur[], cnt, ed;
char liz[maxN][maxN], jump[maxN][maxN];
struct Eddge
{
int nex, to, flow;
Eddge(int a=-, int b=, int c=):nex(a), to(b), flow(c) {}
}edge[maxE];
inline void addEddge(int u, int v, int w)
{
edge[cnt] = Eddge(head[u], v, w);
head[u] = cnt++;
}
inline void _add(int u, int v, int w) { addEddge(u, v, w); addEddge(v, u, ); }
inline int _id(int x, int y) { return (x - ) * M + y; }
inline bool can_out(int x, int y) { return x <= D || y <= D || (N - x < D) || (M - y < D); }
bool In_map(int x, int y) { return x >= && y >= && x <= N && y<= M; }
int deep[];
queue<int> Q;
inline bool bfs()
{
for(int i=; i<=ed; i++) deep[i] = ;
while(!Q.empty()) Q.pop();
Q.push(st); deep[st] = ;
while(!Q.empty())
{
int u = Q.front(); Q.pop();
for(int i=head[u], v, f; ~i; i=edge[i].nex)
{
v = edge[i].to; f = edge[i].flow;
if(f && !deep[v])
{
deep[v] = deep[u] + ;
Q.push(v);
}
}
}
return deep[ed];
}
inline int dfs(int u, int dist)
{
if(u == ed) return dist;
for(int &i=cur[u], v, f; ~i; i=edge[i].nex)
{
v = edge[i].to; f = edge[i].flow;
if(f && deep[v] == deep[u] + )
{
int di = dfs(v, min(dist, f));
if(di)
{
edge[i].flow -= di;
edge[i^].flow += di;
return di;
}
}
}
return ;
}
inline int Dinic()
{
int ans = , tmp;
while(bfs())
{
for(int i=; i<=ed; i++) cur[i] = head[i];
while((tmp = dfs(st, INF))) ans += tmp;
}
return ans;
}
inline void init()
{
all =cnt = ;
memset(head, -, sizeof(head));
}
int main()
{
int T; scanf("%d", &T);
for(int Cas=; Cas<=T; Cas++)
{
scanf("%d%d", &N, &D);
init();
for(int i=; i<=N; i++) scanf("%s", jump[i] + );
M = (int)strlen(jump[] + );
ed = * N * M + ;
for(int i=; i<=N; i++)
{
scanf("%s", liz[i] + );
for(int j=; j<=M; j++)
{
if(liz[i][j] == 'L')
{
all++;
_add(st, _id(i, j), );
}
}
}
for(int i=, u, v; i<=N; i++)
{
for(int j=; j<=M; j++)
{
u = _id(i, j);
if(jump[i][j] > '')
{
_add(u, u + N * M, jump[i][j] - '');
if(can_out(i, j))
{
_add(u + N * M, ed, jump[i][j] - '');
continue;
}
for(int x=; x<=D; x++)
{
for(int y=D-x; y>=; y--)
{
if(!x && !y) continue;
if(In_map(i + x, j + y))
{
v = _id(i + x, j + y);
_add(u + N * M, v, jump[i][j] - '');
}
if(In_map(i - x, j + y))
{
v = _id(i - x, j + y);
_add(u + N * M, v, jump[i][j] - '');
}
if(In_map(i + x, j - y))
{
v = _id(i + x, j - y);
_add(u + N * M, v, jump[i][j] - '');
}
if(In_map(i - x, j - y))
{
v = _id(i - x, j - y);
_add(u + N * M, v, jump[i][j] - '');
}
}
}
}
}
}
printf("Case #%d: ", Cas);
int ans = all - Dinic();
if(ans == ) printf("no lizard was left behind.\n");
else if(ans == ) printf("1 lizard was left behind.\n");
else printf("%d lizards were left behind.\n", ans);
}
return ;
}

最新文章

  1. iOS 开发技术牛人博客
  2. CentOS7下安装和使用Xdebug
  3. 【转】家庭wifi覆盖指导
  4. linux专题一之文件管理(目录结构、创建、查看、删除、移动)
  5. retain,copy,assign及autorelease ,strong,weak
  6. What&#39;s New in C# 6.0
  7. Waterfall———瀑布流布局插件, 类似于 Pinterest、花瓣、发现啦。
  8. Myeclipse 设定文件的默认打开方式
  9. strictmode
  10. MySQL死锁[转]
  11. ubuntu16.04安装jdk1.8
  12. 看到个有趣的方法批量下载rtf模板
  13. shell知识
  14. Netty 系列九(支持UDP协议).
  15. redis进阶
  16. STL::unordered_map/unordered_multimap
  17. JAVA NIO:Buffer.mark()的用法
  18. [代码]--ORA-01843: 无效的月份
  19. Week-2-作业1
  20. python开发_tkinter_单选按钮

热门文章

  1. stl应用
  2. WinForm:如何在ListBox中添加CheckBox
  3. go中基本数据类型转换为string类型的方法
  4. Python之路-面向对象&amp;继承和多态&amp;类属性和实例属性&amp;类方法和静态方法
  5. KNN算法项目实战——改进约会网站的配对效果
  6. Taro -- 定义全局变量
  7. less:注释
  8. bzoj5084 hashit 广义SAM+树链的并
  9. python利用循环修改list内容
  10. Element ui 上传文件组件(单文件上传) 点击提交 没反应