题目背景

07四川省选

题目描述

在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。

每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。

输入输出格式

输入格式:

输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。

输出格式:

输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。

输入输出样例

输入样例#1:

5 8 2
00000000
02000000
00321100
02000000
00000000
........
........
..LLLL..
........
........
输出样例#1:

1

说明

100%的数据满足:1<=r, c<=20, 1<=d<=3

写代码时犯了三个错误

  *注意柱子间建边条件。满足条件:不在同一列 或 不在同一行 不是既 在同一列 或 不在同一行。

  *读入的是字符。

  *出图条件。

  *数组大小。至多有400个点。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<math.h>
using namespace std;
#define M 99893535
int c,r,d,dd,s,t,tot,na[][],ans,m1[][],dep[],map[][];
char m2[][];
int dfs(int u,int t,int f)
{
if(u==t) return f;
int d;
for(int v=;v<=tot;v++)
if(map[u][v]>&&dep[v]==dep[u]+&&(d=dfs(v,t,min(f,map[u][v]))))
{
map[u][v]-=d;
map[v][u]+=d;
return d;
}
return ;
}
int bfs(int s=,int t=)
{
queue<int>q;q.push(s);
memset(dep,-,sizeof(dep));
dep[s]=;
while(!q.empty()){
int u=q.front();q.pop();
for(int v=;v<=tot;v++)
if(map[u][v]>&&dep[v]==-)
{
dep[v]=dep[u]+;
q.push(v);
}
}
return dep[t]!=-;
}
int dinic()
{
int flow=,f=;
while(bfs(,))
while(){
f=dfs(,,M);
if(!f) break;
flow+=f;
}
return flow;
}
void find(int x,int y)
{
int now=na[x][y]+;
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
if( (i!=x||j!=y) &&m1[i][j]>)
if(d*d>= ((x-i)*(x-i)+(y-j)*(y-j)) )
map[now][ na[i][j] ]=M;
}
int main()
{
s=,t=,tot=;
scanf("%d%d%d",&r,&c,&d);
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
{
char oo;
cin>>oo;
m1[i][j]=oo-'';
if(m1[i][j])
{
int w=na[i][j]=++tot;tot++;
map[w][w+]=m1[i][j]; }
}
char o;
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
{
cin>>o; m2[i][j]=o;
if(o=='L')
{
int w=na[i][j];
map[s][w]=;
ans++;
}
}
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
if(m1[i][j])
{
find(i,j);
if(i<=d||j<=d||(r-i+)<=d||(c-j+)<=d)
map[ na[i][j]+ ][t]=M ;
}
printf("%d",ans-dinic());
return ;
}

最新文章

  1. 监控平台项目之CSS总结——基于angularjs、bootstrap、jquery等框架
  2. sharepoint2010问卷调查(4)-实现问卷的重复答复次数(采用自定义字段类型和JS)
  3. The quieter you become,The more you are able to hear.
  4. flask路由和视图和cookie
  5. js中setInterval与setTimeout用法
  6. GNU C 扩展(转)
  7. centos5安装在大硬盘上面的问题
  8. JDBC学习总结(一)
  9. iOS 的一点理解(一) 代理delegate
  10. MySQL 面试基础
  11. Meth | elementary OS常用配置
  12. 鼠标聚焦到Text输入框时,按回车键刷新页面原因及解决方法
  13. [WPF]使用Pack URI路径訪问二进制资源
  14. experss框架—基础认识
  15. TreeMap集合特点、排序原理
  16. Problem 2. number题解
  17. ASP .NET Core HTTP Error 502.5 – Process Failure
  18. rar自动压缩备份
  19. VS2017 下载离线MSDN文档
  20. react +webpack 配置px2rem

热门文章

  1. CodeForces - 597C:Subsequences (主席树+DP)
  2. css font-family(字体样式)
  3. NVIDIA GPU 计算能力
  4. java 02 内部类
  5. vue 重塑数组之 修改数组指定index的值
  6. docker 学习(四) springboot + docker
  7. SSAS GUID 添加 行计数,非重复计数 等 遇到的莫名其妙的问题
  8. TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
  9. ASP.NET Core会议管理平台实战_2、基本概念的理解
  10. JSON 下 -- jansson 示例