蜥蜴
Description
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。
Input
输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。
Output
输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。
Sample Input
5 8 2
00000000
02000000
00321100
02000000
00000000
........
........
..LLLL..
........
........
Sample Output
1
HINT
100%的数据满足:1<=r, c<=20, 1<=d<=4

分析:

由于每个柱子能经过蜥蜴的次数有限,可将一个柱子拆为两个点Ai,Bi,从Bi到Ai连一条边,容量为柱子高度。如果柱子j与i距离符合要求,就连一条Ai到Bj容量无限的边,如果一开始该柱子上有蜥蜴就从源点连一条容量为1的边指向柱子i,如果柱子i到边界距离不超过d就向汇点连一条容量无限的边,跑一遍dinic后用蜥蜴数减最大流即为答案。

代码:

program work;
var
f,map:array[..,..]of longint;
q:array[..]of longint;
a,b,c,h:array[..]of longint;
n,i,m,j,s,t,d,ans,k,v,flow:longint;
ch:char;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
function bfs:boolean;
var l,r,x,i:longint;
begin
fillchar(h,sizeof(h),);
l:=; r:=;
q[]:=s;h[s]:=;
while l<r do
begin
inc(l); x:=q[l];
for i:= to t do
if (f[x,i]>)and(h[i]=) then
begin
h[i]:=h[x]+; inc(r);q[r]:=i;
end;
end;
if h[t]= then exit(false) else exit(true);
end;
function dfs(x,flow:longint):longint;
var d,i:longint;
begin
if x=t then exit(flow);
for i:= to t do
if (h[i]=h[x]+)and(f[x,i]>) then
begin
d:=dfs(i,min(f[x,i],flow));
if d<> then
begin
inc(f[i,x],d);dec(f[x,i],d);exit(d);
end;
end;
exit();
end;
begin
readln(n,m,d);fillchar(f,sizeof(f),);
for i:= to n do begin
for j:= to m do
begin
read(ch);
if ch<>'' then begin inc(t); a[t]:=i; b[t]:=j;c[t]:=ord(ch)-; map[i,j]:=t;end;
end; readln; end;
for i:= to n do begin
for j:= to m do
begin
read(ch); if ch='L' then begin f[,t+map[i,j]]:=; inc(k); end;
end; readln; end;
for i:= to t do
begin
f[i+t,i]:=c[i];
for j:= to t do
if j<>i then
begin
if sqr(a[i]-a[j])+sqr(b[i]-b[j])<=d*d then f[i,j+t]:=k;
end;
if (a[i]-d<=)or(a[i]+d>n)or(b[i]-d<=)or(b[i]+d>m) then f[i,t*+]:=k;
end;
ans:=; s:=; t:=t*+;
while bfs do
begin
flow:=dfs(s,maxlongint div );
while flow<> do
begin
inc(ans,flow); flow:=dfs(s,maxlongint div );
end;
end;
writeln(k-ans);
end.

BZOJ 1066:[SCOI2007]蜥蜴(最大流)的更多相关文章

  1. BZOJ 1066: [SCOI2007]蜥蜴( 最大流 )

    结点容量..拆点然后随便写 --------------------------------------------------------------- #include<cstdio> ...

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

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

  3. POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)

    POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...

  4. [BZOJ 1066] [SCOI2007] 蜥蜴 【最大流】

    题目链接:BZOJ - 1066 题目分析 题目限制了高度为 x 的石柱最多可以有 x 只蜥蜴从上面跳起,那么就可以用网络流中的边的容量来限制.我们把每个石柱看作一个点,每个点拆成 i1, i2,从 ...

  5. BZOJ 1066 [SCOI2007]蜥蜴(最大流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1066 [题目大意] 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些 ...

  6. bzoj 1066: [SCOI2007] 蜥蜴

    这道题还是挺好想的,但我一开始还是想错了…… 把每个石柱拆成两个点,一个入度,一个出度,两个点连一条容量为高度的边,这样就可以限制从此石柱上经过的蜥蜴的数量.关于蜥蜴是否单独成点,我是单独当成了一个点 ...

  7. bzoj 1066 : [SCOI2007]蜥蜴 网络流

    题目链接 给一个n*m的图, 里面每一个点代表一个石柱, 石柱有一个高度. 初始时有些石柱上面有蜥蜴, 蜥蜴可以跳到距离他曼哈顿距离小于等于d的任意一个石柱上,跳完后, 他原来所在的石柱高度会减一, ...

  8. 1066: [SCOI2007]蜥蜴

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

  9. [SCOI2007] 蜥蜴 (最大流)

    [SCOI2007] 蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1 ...

  10. P2472 [SCOI2007]蜥蜴 (最大流)

    题目 P2472 [SCOI2007]蜥蜴 解析 这个题思路比较清晰,本(qi)来(shi)以(jiu)为(shi)无脑建图跑最大流,结果挂了,整了一个小时后重新建图才过的. 建立一个超级源点和一个超 ...

随机推荐

  1. 20155334 实验三 敏捷开发与XP实践

    实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰写实验报告,实验报告以 ...

  2. 成都优步uber司机客户端下载-支持安卓、IOS系统、优步司机端Uberpartner

    国外打车软件优步乘客端大家在手机应用商店里都可以下载到,但是优步司机的App却不好找下载地址:这就跟滴滴打车一样,滴滴的乘客端是滴滴打车,而司机端是滴滴专车,司机版本在应用商店里都找不到,原因不清楚. ...

  3. jenkins统计单元测试的覆盖率

    前提:单元测试和被测代码在一个仓库 maven的pom配置 依赖增加 <dependency> <groupId>org.jacoco</groupId> < ...

  4. PHP:Iterator(迭代器)接口和生成器

    迭代器 可在内部迭代自己的外部迭代器或类的接口.详情:http://php.net/manual/zh/class.iterator.php 接口摘要 Iterator extends Travers ...

  5. 原生js使用ajax

    AJAX 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容(默认是异步) (1)使用ajax会用到XMLHttpRequest()对象 (2)然后使用open方法定义请求方法和请求 ...

  6. 网络通讯中 bind函数的作用

    面向连接的网络应用程序分为客户端和服务器端.服务器端的执行流程一般为4步,客户端程序相对简单,一般需要两个步骤. 服务器端执行流程4步如下: (1)调用socket函数,建立一个套接字,该套接字用于接 ...

  7. android 签名相关

    查看keystorekeytool -list -v -keystore debug.keystoreapk签名不带别名 apksigner sign --ks debug.keystore test ...

  8. 一学就会pip换镜像源

    首先介绍一个国内好用的镜像站 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣 http://pypi.douban.com/simple/ 清华大学 htt ...

  9. MySQL高性能优化实战总结

    1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多 ...

  10. WIN 7 发布项目

    本人工作都快两年了不知道web 怎么发布 今天我自己非常恼火!我就暗暗研究.希望能给新手指导 准备工作:WIN7 系统 .IIS 6.0.MVC (vs 新建mvc项目自带的项目) OK begin ...