题目背景

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 ;
}

蜥蜴-DInic的更多相关文章

  1. bzoj1066 蜥蜴 (dinic)

    最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...

  2. 1066: [SCOI2007]蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3545  Solved: 1771[Submit][Status] ...

  3. bzoj 1066 蜥蜴

    最大流. 建图:首先将每根柱子拆成两个点. 每根柱子的入点向出点连一条容量为柱子高度的边. 每根柱子的出点向可以到达的柱子的入点连一条容量为正无穷的边. 源点向每根初始有蜥蜴的柱子的入点连一条容量为一 ...

  4. BZOJ 1066 【SCOI2007】 蜥蜴

    Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为$1$,蜥蜴的跳跃距离是d,即蜥蜴可以跳 ...

  5. 蜥蜴(bzoj 1066)

    Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平 ...

  6. BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴

    与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit:  ...

  7. 【bzoj1066】[SCOI2007]蜥蜴 网络最大流

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

  8. BZOJ1066 [SCOI2007]蜥蜴

    首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...

  9. poj 2711 Leapin' Lizards && BZOJ 1066: [SCOI2007]蜥蜴 最大流

    题目链接:http://poj.org/problem?id=2711 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1066 Your p ...

随机推荐

  1. docker中Ubuntu安装jdk1.8

    1.在宿主系统下载所需要的jdk版本的gz文件 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  2. Log4j输出格式控制--log4j的PatternLayout参数含义

      参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字 ...

  3. 清理html中空白符/空格/换行在行内元素中产生的间距

    问题:行内元素之间产生间隔 原因:换行符,Tab制表符,空格产生间隔 解决方法: 1.行内元素写成一行 2.设置font-size为0px 把父级文本设置为0px; 再为需要显示文字的行内元素设置文字 ...

  4. gitblit安装使用

    1.下载地址 http://www.gitblit.com/ 2.安装jdk(自行安装) 3.解压gitblit # tar -zxvf gitblit-1.8.0.tar.gz 4.配置# cd g ...

  5. codeforces 450B B. Jzzhu and Sequences(矩阵快速幂)

    题目链接: B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input ...

  6. defaultdict & Counter

    在使用python原生的数据结构dict的时候,如果d[key]这样的方式访问,当指定的key不存在时,会抛出keyError异常.但是如果使用defaultdict(导入collections),只 ...

  7. 当数据库中的字段与javabean中对应的属性名不同

    当数据库中的字段与javabean中对应的属性名不同时: 在查询语句中对不同的字段起别名,例如: 数据库中的字段名为last_name , javabean中为lastName则:select las ...

  8. SKINTOOL 系统不能正常运行

    1..net安装 2.Microsoft Visual C++ Redistributable Package  运行库

  9. nagios对windows流量的检测

    windows下用于和 nagios 整合监控的方式主要有三种:nsclient++ .nrpe_nt.SNMP.三者各自的特点主要如下: 1.nsclient++比较成熟稳定,文档也丰富,内置很多了 ...

  10. 创建calico网络报错client response is invalid json

    使用docker创建calico网络失败. # docker network create --driver calico --ipam-driver calico-ipam testcalico E ...