最大流板子题。

对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度)

对于距离不超过d的两根柱子i,j,建边(bi,aj,inf)

对于起始位置在i的每个蜥蜴,建边(S,ai,1)

对于能跳出地图的柱子i,建边(bi,E,inf)

然后跑dinic即可

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=,inf=0x3f3f3f3f; struct Edge{
int a,b,v;
int ne;
}eg[maxn*maxn*maxn*maxn*]; int R,C,D,pcnt,rcnt,ecnt;
int map[maxn][maxn][];
int rd[][];
int egh[maxn*maxn*],P[maxn][maxn][];
int deep[maxn*maxn*]; inline void addedge(int a,int b,int v){
eg[ecnt].a=a;eg[ecnt].b=b;eg[ecnt].v=v;eg[ecnt].ne=egh[a];egh[a]=ecnt++;
eg[ecnt].a=b;eg[ecnt].b=a;eg[ecnt].v=;eg[ecnt].ne=egh[b];egh[b]=ecnt++;
} bool bfs(){
queue<int> q;memset(deep,,sizeof(deep));
q.push();deep[]=;
while(!q.empty()){
int p=q.front();q.pop();
for(int i=egh[p];i!=-;i=eg[i].ne){
if(eg[i].v&&!deep[eg[i].b]){
q.push(eg[i].b);deep[eg[i].b]=deep[p]+;
}
}
}return deep[];
} int dinic(int x,int l){
if(x==) return l;int tmp=l;
for(int i=egh[x];i!=-;i=eg[i].ne){
if(deep[eg[i].b]!=deep[x]+||!eg[i].v) continue;
int re=dinic(eg[i].b,min(eg[i].v,l));
if(!re) deep[eg[i].b]=;
tmp-=re;eg[i].v-=re;eg[i^].v+=re;
if(!tmp) break;
}return l-tmp;
} int main(){
int i,j,k,ans=;
char s[maxn];
//freopen("1066.in","r",stdin);
scanf("%d%d%d",&R,&C,&D);
for(i=;i<=R;i++){
scanf("%s",s+);
for(j=;j<=C;j++) map[i][j][]=s[j]-'';
}
for(i=;i<=R;i++){
scanf("%s",s+);
for(j=;j<=C;j++) map[i][j][]=(s[j]=='L'?:);
}
for(i=-D;i<=D;i++){
for(j=-D;j<=D;j++){
if(i*i+j*j<=D*D){rd[rcnt][]=i;rd[rcnt++][]=j;}
}
}
pcnt=;memset(egh,-,sizeof(egh));
for(i=;i<=R;i++) for(j=;j<=C;j++) if(map[i][j][]){
P[i][j][]=++pcnt;P[i][j][]=++pcnt;addedge(P[i][j][],P[i][j][],map[i][j][]);
if(map[i][j][]) {addedge(,P[i][j][],);ans++;}
}
for(i=;i<=R;i++){
for(j=;j<=C;j++){
if(!map[i][j][]) continue;
bool b=;
for(k=;k<rcnt;k++){
int ii=i+rd[k][],jj=j+rd[k][];
if(ii<=||ii>R||jj<=||jj>C) b=;
else if(map[ii][jj]) addedge(P[i][j][],P[ii][jj][],inf);
}if(b) addedge(P[i][j][],,inf);
}
}
while(bfs()) ans-=dinic(,inf);
printf("%d",ans);
}

bzoj1066 蜥蜴 (dinic)的更多相关文章

  1. 蜥蜴-DInic

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

  2. BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...

  3. bzoj1066 蜥蜴

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

  4. 【蒟蒻の进阶PLAN】 置顶+持续连载

    看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...

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

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

  6. BZOJ1066 SCOI2007 蜥蜴 【网络流-最大流】

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

  7. 【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流

    [bzoj1066]: [SCOI2007]蜥蜴 把石柱拆点,流量为高度 然后S与蜥蜴连流量1的边 互相能跳到的石柱连inf的边 石柱能到边界外的和T连inf的边 然后跑dinic就好了 /* htt ...

  8. [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴

    [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴 试题描述 在一个 \(r\) 行 \(c\) 列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥 ...

  9. BZOJ1066 [SCOI2007]蜥蜴

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

随机推荐

  1. PAT 7-12 拯救007

    在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据 ...

  2. tomcat启动参数

    /usr/java/jdk1..0_191-amd64/bin/java -Djava.util.logging.config./conf/logging.properties -Djava.util ...

  3. 如何入门vue之二

    学习完指令之后我们需要学习的就是组件. 在学习组件前我们要了解一下 methods 用来处理事件的. computed用来计算属性  他就是类似于data一样只不过是动态的处理数据 里面写的方法当成属 ...

  4. css3新属性box-orient

    前言 box-orient属性经常与display:box属性结合使用 div { width:350px; height:100px; border:1px solid black; /* Fire ...

  5. [转帖]windows+xshell+xming访问非桌面版Linux服务器

    windows+xshell+xming访问非桌面版Linux服务器 2016年06月05日 00:09:11 jxxiaohou 阅读数:11996 标签: Linux 更多 个人分类: Linux ...

  6. 994.Contiguous Array 邻近数组

    描述 Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and ...

  7. pHP生成唯一单号

    这几天一直在写个人使用的用户中心,虽然期间遇到不少的问题,但还是一点点的都解决了,也从制作期间学到不少的知识,今天就说一说利用PHP生成订单单的方法. 订单号,大家都不陌生,无论从在网上购物,还是在线 ...

  8. php7函数,声明,返回值等新特性介绍

    使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7) 现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数. functi ...

  9. laravel 守护进程Supervisor的配置

    安装Supervisor Supervisor是Linux系统中常用的进程守护程序.如果队列进程queue:work意外关闭,它会自动重启启动队列进程.在Ubuntu安装Supervisor 非常简单 ...

  10. git ignore 忽略 idea文件

    下载了项目组的代码之后发现,一个问题,一编译就生成了很多的 .idea文件夹 还有 target文件夹,这些是不需要提交到git上的, 需要提交的时候屏蔽一下,所以需要建立一个ignore文件列表把他 ...