P2472 [SCOI2007]蜥蜴

把每个点拆成2个点,两点之间连边的边权为石柱高度

新建虚拟源点$S$和汇点$T$

$S$向所有有蜥蜴的点连边,边权1

其他边都连$inf$

剩下就是裸的$dinic$辣

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 200005
inline int Min(int a,int b){return a<b?a:b;}
inline int Abs(int a){return a<?-a:a;}
const int inf=1e8;
char a[][];
int R,C,D,S,T,d[N],cur[N],tot; bool vis[N];
int cnt=,hd[N],nxt[N],ed[N],poi[N],val[N];
queue <int> h;
inline void adde(int x,int y,int v){
nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
ed[x]=cnt, poi[cnt]=y, val[cnt]=v;
}
inline void link(int x,int y,int v){adde(x,y,v),adde(y,x,);}
inline int id(int x,int y){return (x-)*C+y;}
bool Bfs(){
memset(vis,,sizeof(vis));
h.push(S); vis[S]=;
while(!h.empty()){
int x=h.front(); h.pop();
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(!vis[to]&&val[i]>)
vis[to]=,d[to]=d[x]+,h.push(to);
}
}return vis[T];
}
int Dfs(int x,int a){
if(x==T||a==) return a;
int F=,f;
for(int &i=cur[x];i&&a;i=nxt[i]){
int to=poi[i];
if(d[to]==d[x]+&&(f=(Dfs(to,Min(a,val[i]))))>)
F+=f,a-=f,val[i]-=f,val[i^]+=f;
}return F;
}
int dinic(){
int re=;
while(Bfs()){
for(int i=;i<=T;++i) cur[i]=hd[i];
re+=Dfs(S,inf);
}return re;
}
void draw(int x,int y){//向周围距离<=d的点连边
if(a[x][y]=='') return ;
int p=id(x,y); bool tt=;
link(p<<,p<<|,a[x][y]-'');
for(int i=x-D;i<=x+D;++i)
for(int j=y-D;j<=y+D;++j){
if((i==x&&j==y)||Abs(x-i)+Abs(y-j)>D) continue;
if(i>&&i<=R&&j>&&j<=C) link(p<<|,id(i,j)<<,inf);
else if(tt) link(p<<|,T,inf),tt=;
}
}
int main(){
scanf("%d%d%d",&R,&C,&D);
S=R*C*+; T=S+;
for(int i=;i<=R;++i) scanf("%s",a[i]+);
for(int i=;i<=R;++i)
for(int j=;j<=C;++j)
draw(i,j);
for(int i=;i<=R;++i) scanf("%s",a[i]+);
for(int i=;i<=R;++i)
for(int j=;j<=C;++j)
if(a[i][j]=='L')
link(S,id(i,j)<<,),++tot;
printf("%d",tot-dinic());
return ;
}

P2472 [SCOI2007]蜥蜴(网络流)的更多相关文章

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

    P2472 [SCOI2007]蜥蜴 自己第一道独立做题且一遍AC的网络流题纪念... 看到这道题我就想到网络流建图的方式了... 首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离, ...

  2. P2472 [SCOI2007]蜥蜴(网络最大流)

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

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

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

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

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

  5. P2472 [SCOI2007]蜥蜴

    传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...

  6. 洛谷P2472 [SCOI2007]蜥蜴 题解

    题目链接: https://www.luogu.org/problemnew/show/P2472 分析: 这道题用最大流解决. 首先构建模型. 一根柱子可以跳入和跳出,于是拆成两个点:入点和出点. ...

  7. [洛谷P2472] [SCOI2007]蜥蜴

    题目链接: 蜥蜴 题目分析: 一道网络流,先来分析一下问题: 在一个\(r*c\)的图中分布了一些数,其他地方都用\(0\)填充,我们分别从指定的一些数出发,每次可以移动到周围距离为\(d\)以内的数 ...

  8. [bzoj1066] [SCOI2007] 蜥蜴 - 网络流

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

  9. 【题解】Luogu P2472 [SCOI2007]蜥蜴

    原题传送门 题目要求无法逃离的最少有多少 直接做肯定不好做,我们帮题目变一个说法:最多能逃离多少 这个询问一看就是最大流 考虑如何建图: 1.将S和每一个有蜥蜴的点连一条流量为1的边(每个蜥蜴只能用1 ...

随机推荐

  1. pymysql操作mysql

    一.使用PyMySQL操作mysql数据库 适用环境 python版本 >=2.6或3.3 mysql版本>=4.1 安装 可以使用pip安装也可以手动下载安装.使用pip安装,在命令行执 ...

  2. Qt编写高仿苹果MAC电脑输入法(支持触摸滑动选词)

    最近有个朋友找我定制一个输入法,需要高仿一个苹果MAC电脑的输入法,MAC操作系统的审美无疑是相当棒的,于是乎直接拿以前的输入法高仿了一个,由于之前有做过输入法这块的开发,而且改进了四年,各种需求都遇 ...

  3. 转载:VOC2007数据集制作

    转载自:https://blog.csdn.net/gaohuazhao/article/details/60871886 另外,可参考:https://blog.csdn.net/dcxhun3/a ...

  4. VS2013生成XP独立运行程序

    一.首先选择静态库  如果设置不对会出现如下错误 fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll v ...

  5. 我的C语言编程风格

    前几天看别人的代码,真是的看的头昏脑涨,基本没有注释.乱起的变量名字,还要费尽心思去解读作者的意思.突然感觉高效的程序注释说明和良好的编程风格是多么的重要. 为了不让别人在看到我的代码时在背后骂我,也 ...

  6. python GIL :全局解释器

    cpython 解释器中存在一个GIL(全局解释器锁),无论多少个线程.多少颗cpu 他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行. 因为有GIL的存在 ...

  7. Java随机字符串:随机数字字符串,工具类

    Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...

  8. [yum] yum加速

    通常,以我对于个人生活和工作品质的要求,并没有这个需求. 因为我的宽带费很贵,独享.就算是centos主站,也很快.但是当你去了一些办公环境恶劣的地方上班的时候, 也难免动用一些小技巧.如下: 装这个 ...

  9. CNPM 安装 for angularjs

    npm config set proxy=http://127.0.0.1:8087npm config delete proxynpm config set registry=http://regi ...

  10. Apache 2.4.27外网访问403(Forbidden)错误

    httpd.conf <Directory /> AllowOverride none #Require all denied 注释这句 Allow from all Require al ...