bzoj1066 蜥蜴
Description
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。
Input
输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。
Output
输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。
最大流
每条石柱拆成两个点,连边容量为石柱高度
在距离不超过d的石柱间连边,容量为inf
从源点连边到每条有蜥蜴的石柱,容量为1
从可以跳到图外的点连边到汇点,容量为inf
#include<cstdio>
#include<cstring>
struct edge{
int nx,w;
edge(){}
edge(int a,int b){
nx=a;
w=b;
}
}es[];
int ep=;
const int S=,T=,INF=;
int g[][],gp=;
int h[];
int v[][];
int q[];
int n,m,ans=,mx,ls=;
int ids[][],idp=;
int hs[][];
char c;
inline int min(int a,int b){return a<b?a:b;}
inline void addedge(int s,int t,int w){
es[ep]=edge(t,w);
g[gp][]=ep++;
g[gp][]=g[s][];
g[s][]=gp++;
es[ep]=edge(s,);
g[gp][]=ep++;
g[gp][]=g[t][];
g[t][]=gp++;
}
inline bool bfs(){
int qs=,qe=;
q[qe++]=S;
memset(h,-,sizeof h);
h[S]=;
while(qs<qe){
int w=q[qs++];
int i=w;
while(i=g[i][]){
int e=g[i][];
int u=es[e].nx;
if(h[u]!=-||!es[e].w)continue;
h[u]=h[w]+;
q[qe++]=u;
}
}
return h[T]!=-;
}
int dfs(int w,int f){
if(w==T)return f;
int i=w;
int used=,c;
while(i=g[i][]){
int e=g[i][];
int u=es[e].nx;
if(h[u]!=h[w]+||es[e].w==)continue;
c=f-used;
c=dfs(u,min(c,es[e].w));
es[e].w-=c;
es[e^].w+=c;
used+=c;
if(used==f)return f;
}
if(!used)h[w]=-;
return used;
}
char gc(){
char c=getchar();
while((c<''||c>'')&&c!='L'&&c!='.')c=getchar();
return c;
}
int main(){
scanf("%d%d%d",&n,&m,&mx);
for(int i=;i<n;i++)
for(int j=;j<m;j++)
ids[i][j]=idp++;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
c=gc();
hs[i][j]=c-'';
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(hs[i][j]>){
addedge(ids[i][j],ids[i][j]+n*m,hs[i][j]);
bool o=;
for(int x=-mx;x<=mx;x++){
for(int y=-mx;y<=mx;y++){
if(x*x+y*y>mx*mx)continue;
if(i+x<||i+x>=n||j+y<||j+y>=m){
o=;
continue;
}
if(hs[i+x][j+y]==)continue;
addedge(ids[i][j]+n*m,ids[i+x][j+y],INF);
}
}
if(o)addedge(ids[i][j]+n*m,T,INF);
}
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
c=gc();
if(c=='L')addedge(S,ids[i][j],),ls++;
}
}
while(bfs())ans+=dfs(S,INF);
printf("%d",ls-ans);
return ;
}
bzoj1066 蜥蜴的更多相关文章
- BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...
- bzoj1066 蜥蜴 (dinic)
最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...
- 【蒟蒻の进阶PLAN】 置顶+持续连载
看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...
- 【bzoj1066】[SCOI2007]蜥蜴 网络最大流
[bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...
- BZOJ1066 SCOI2007 蜥蜴 【网络流-最大流】
BZOJ1066 SCOI2007 蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离 ...
- 【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流
[bzoj1066]: [SCOI2007]蜥蜴 把石柱拆点,流量为高度 然后S与蜥蜴连流量1的边 互相能跳到的石柱连inf的边 石柱能到边界外的和T连inf的边 然后跑dinic就好了 /* htt ...
- [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴
[BZOJ1066][luogu_P2472][SCOI2007]蜥蜴 试题描述 在一个 \(r\) 行 \(c\) 列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥 ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- [bzoj1066] [SCOI2007] 蜥蜴 - 网络流
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个 ...
随机推荐
- Using XmlHttpRequest 写JSON网页
代码如下-----xmlhttprequest.responseJSON: <!DOCTYPE html> <html> <head> <meta chars ...
- ehlib ado 删除选中记录 的方法
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin do begin DBGridEh1.DataSource. ...
- ExceptionHandler 异常公共处理
异常的公共处理很多种,采用注解的方式,拦截器的方式等都可以,我采用的是继承 AbstractHandlerExceptionResolver 来实现, 上代码 package com.yun.util ...
- 搭建 spring 项目
参考原文:http://blog.csdn.net/binyao02123202/article/details/20387595 1.新建maven web 工程 2.编辑pom.xml添加依赖 & ...
- 《JAVA----day01和day02》
1,(在有符号的情况下)若一个二进制数都是1,则对应的十进制数是-1 2,在定义数值类型时,若无特别说明,整数默认:int 小数默认:double 在内存中 占字节数 取值范围 (1)byte:1个 ...
- ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: N O) MYSQL
ERROR 1045 (28000): Access denied for user ODBC@localhost 刚使用mysql, 碰到这个问题.. C:\Program Files\MySQL\ ...
- [转]如何将文件夹式的项目源码导入Visual Studio
原文:https://blog.csdn.net/yangdashi888/article/details/73323419 1.把源码目录拷贝到工程目录下 2.这时在vs的目录列表里是看不到这个目录 ...
- Tomcat问题:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined ,At least one of these environment variable is needed to run this program
一眼就能看出来是jdk的环境有问题,但是用了这么久的jdk一直都配置的好好的,怎么一到Tomcat上就这么矫情了. 最后查解决方案,原来是我的jdk从官网直接下载的,虽然我修改了java_home,但 ...
- [转载]PHP 连接 Rabbitmq 实例代码
转自 http://www.dahouduan.com/2017/11/23/php-rabbitmq-demo/ 接下来我们用 php 连接 rabbitmq 玩一玩.还没有安装 rabbitmq ...
- MyBatis 与 Spring Data JPA 选择谁?
MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...