最大流板子题。

对于每根柱子,建两个点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=23,inf=0x3f3f3f3f;struct Edge{int a,b,v;int ne;
}eg[maxn*maxn*maxn*maxn*4];int R,C,D,pcnt,rcnt,ecnt;
int map[maxn][maxn][2];
int rd[100][2];
int egh[maxn*maxn*2],P[maxn][maxn][2];
int deep[maxn*maxn*2];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=0;eg[ecnt].ne=egh[b];egh[b]=ecnt++;
}bool bfs(){queue<int> q;memset(deep,0,sizeof(deep));q.push(1);deep[1]=1;while(!q.empty()){int p=q.front();q.pop();for(int i=egh[p];i!=-1;i=eg[i].ne){if(eg[i].v&&!deep[eg[i].b]){q.push(eg[i].b);deep[eg[i].b]=deep[p]+1;}}}return deep[2];
}int dinic(int x,int l){if(x==2)  return l;int tmp=l;for(int i=egh[x];i!=-1;i=eg[i].ne){if(deep[eg[i].b]!=deep[x]+1||!eg[i].v)  continue;int re=dinic(eg[i].b,min(eg[i].v,l));if(!re) deep[eg[i].b]=0;tmp-=re;eg[i].v-=re;eg[i^1].v+=re;if(!tmp)  break;}return l-tmp;
}int main(){int i,j,k,ans=0;char s[maxn];//freopen("1066.in","r",stdin);scanf("%d%d%d",&R,&C,&D);for(i=1;i<=R;i++){scanf("%s",s+1);for(j=1;j<=C;j++)  map[i][j][0]=s[j]-'0';}for(i=1;i<=R;i++){scanf("%s",s+1);for(j=1;j<=C;j++)  map[i][j][1]=(s[j]=='L'?1:0);}for(i=-D;i<=D;i++){for(j=-D;j<=D;j++){if(i*i+j*j<=D*D){rd[rcnt][0]=i;rd[rcnt++][1]=j;}}}pcnt=2;memset(egh,-1,sizeof(egh));for(i=1;i<=R;i++)  for(j=1;j<=C;j++)  if(map[i][j][0]){P[i][j][0]=++pcnt;P[i][j][1]=++pcnt;addedge(P[i][j][0],P[i][j][1],map[i][j][0]);if(map[i][j][1])  {addedge(1,P[i][j][0],1);ans++;}}for(i=1;i<=R;i++){for(j=1;j<=C;j++){if(!map[i][j][0])  continue;bool b=0;for(k=0;k<rcnt;k++){int ii=i+rd[k][0],jj=j+rd[k][1];if(ii<=0||ii>R||jj<=0||jj>C)  b=1;else if(map[ii][jj])  addedge(P[i][j][1],P[ii][jj][0],inf);}if(b)  addedge(P[i][j][1],2,inf);}}while(bfs())  ans-=dinic(1,inf);printf("%d",ans);
}

转载于:https://www.cnblogs.com/Ressed/p/9354379.html

bzoj1066 蜥蜴 (dinic)相关推荐

  1. BZOJ1066 蜥蜴

    [题目描述] 在一个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: [SCOI2007]蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4506  Solved: 2305 [Submit][Statu ...

  4. BZOJ1066【SCOI2007】蜥蜴 网络流

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

  5. 【codevs2440】【BZOJ1066】蜥蜴,最大流

    Time:2016.05.29 Author:xiaoyimi 转载注明出处谢谢 思路: (水题硬是让我调了1h+) a[i][j]为第i行第j列的石柱高度 把每个石柱i拆成两个点pi,qi,连边流量 ...

  6. bzoj1066 [SCOI2007]蜥蜴 网络流复制点模型

    比较基本的复制点一个接收一个出边的网络流模型, 用自己向自己的边限制流出个数 注意细节: 1.判断是<1不是<0 2.n*m+ 3.ij.kl 码: #include<iostrea ...

  7. [SCOI2007]蜥蜴 (网格图经典四方向建边)

    题意: 在一个n*m的矩阵中,每个格子都有一定的高度,当高度为0时表示该格子不存在,现在这个矩阵中有若干只蜥蜴,每只蜥蜴跳到格子上时,该格子的高度会减一,每只蜥蜴可以跳跃直线距离不大于D的长度,问最少 ...

  8. 洛谷 - P2472 [SCOI2007]蜥蜴(最大流)

    题目链接:点击查看 题目大意:给出一个 n * m 的迷宫,每个位置都有一个耐久度,也就是至多经过 a[ i ][ j ] 位置 ( i , j ),现在迷宫中有一些蜥蜴,每一时刻在每一个位置至多有一 ...

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

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

最新文章

  1. 记一次vue2路由参数传递this指针问题
  2. 19、SQL Server 数据修改之Insert into
  3. 各类环境渗透测试简述
  4. 作业19——夜间模式的开启与关闭,父模板的制作
  5. django中使用原生sql
  6. Google在KDD2013上关于CTR的一篇论文
  7. 在Linux下使用命令发送邮件附件
  8. 9.4SAS软件入门
  9. 使用js实现简单的注册验证
  10. 网络编程基础(Socket ServerSocket)
  11. 墨迹天气3.0引导动画
  12. 卡洛斯·斯利姆·埃卢
  13. 基于MATLAB颜色的植物虫害检测识别
  14. Android调用系统设置界面
  15. 雷电模拟器桥接模式不显示网卡,4版本不能设置代理
  16. 5、判断、循环、数组综合练习案例(迷你DVD)
  17. 【MATLAB】理解采样频率和信号频率的关系
  18. 日本测试人工智能破案,“机械战警”渐行渐近
  19. 纯配置方式使用durid的数据库密码加密
  20. RFP红色荧光蛋白抗体——Nature、Cell高分文章

热门文章

  1. 第7篇-JAVA面向对象Ⅲ
  2. 关于Talend的Patch分支对应Eclipse开发环境的配置总结.
  3. C# 如何实现pfx与snk密钥文件的转换
  4. mysql数据库锁定机制
  5. 详细解析用C#写的小游戏《彩色连珠》(附源代码)
  6. Ubuntu 12.04搭建Ruby on Rails开发环境
  7. Windows系统更新问题汇总(补充修改)
  8. vSphere+Openfiler备忘录
  9. 数据工厂 mysql_.net中利用数据工厂实现多数据库的操作
  10. 关于STM32的变量定义