P2472 [SCOI2007]蜥蜴(最大流)
P2472 [SCOI2007]蜥蜴
自己第一道独立做题且一遍AC的网络流题纪念...
看到这道题我就想到网络流建图的方式了...
首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离,连边,最后能跳出边界的与t连边,跑最大流即可...
突然发现最大流与网格图好像有着某种联系...
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=21,INF=1e9;
int h[N][N],n,m,l,s,t,link[N*N*2],tot=1,d[N*N*2],current[N*N*2],cnt;
struct edge{int y,v,next;}a[N*N*N*N*2];
inline int read()
{
int x=0,ff=1;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') ff=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*ff;
}
inline void add(int x,int y,int v)
{
a[++tot].y=y;a[tot].v=v;a[tot].next=link[x];link[x]=tot;
a[++tot].y=x;a[tot].v=0;a[tot].next=link[y];link[y]=tot;
}
inline double dis(int x1,int y1,int x2,int y2)
{
double x=x1-x2,y=y1-y2;
return sqrt(x*x+y*y);
}
inline bool bfs()
{
queue<int>q;q.push(s);
memset(d,0,sizeof(d));
memcpy(current,link,sizeof(current));
d[s]=1;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=link[x];i;i=a[i].next)
{
int y=a[i].y;
if(d[y]||!a[i].v) continue;
d[y]=d[x]+1;
q.push(y);
if(y==t) return true;
}
}
return false;
}
inline int dinic(int x,int flow)
{
if(x==t) return flow;
int rest=flow,k;
for(int i=current[x];i&&rest;i=a[i].next)
{
current[x]=i;
int y=a[i].y;
if(d[y]==d[x]+1&&a[i].v)
{
k=dinic(y,min(rest,a[i].v));
if(!k) d[y]=0;
a[i].v-=k;
a[i^1].v+=k;
rest-=k;
}
}
return flow-rest;
}
int main()
{
freopen("1.in","r",stdin);
n=read();m=read();l=read();
s=0;t=n*m*2+1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
char c;cin>>c;
h[i][j]=c-'0';
add((i-1)*m+j,(i-1)*m+j+n*m,h[i][j]);
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
char c;cin>>c;
if(c=='L') add(s,(i-1)*m+j,1),cnt++;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
for(int x=max(1,i-l);x<=min(n,i+l);++x)
for(int y=max(1,j-l);y<=min(m,j+l);++y)
if(dis(i,j,x,y)<=l) add((i-1)*m+j+n*m,(x-1)*m+y,INF);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(i<=l||n-i<l||j<=l||m-j<l) add((i-1)*m+j+n*m,t,INF);
int maxflow=0,flow;
while(bfs())
while(flow=dinic(s,INF)) maxflow+=flow;
printf("%d",cnt-maxflow);
return 0;
}
P2472 [SCOI2007]蜥蜴(最大流)的更多相关文章
- P2472 [SCOI2007]蜥蜴 (最大流)
题目 P2472 [SCOI2007]蜥蜴 解析 这个题思路比较清晰,本(qi)来(shi)以(jiu)为(shi)无脑建图跑最大流,结果挂了,整了一个小时后重新建图才过的. 建立一个超级源点和一个超 ...
- P2472 [SCOI2007]蜥蜴(网络最大流)
P2472 [SCOI2007]蜥蜴 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距 ...
- P2472 [SCOI2007]蜥蜴(网络流)
P2472 [SCOI2007]蜥蜴 把每个点拆成2个点,两点之间连边的边权为石柱高度 新建虚拟源点$S$和汇点$T$ $S$向所有有蜥蜴的点连边,边权1 其他边都连$inf$ 剩下就是裸的$dini ...
- [SCOI2007] 蜥蜴 (最大流)
[SCOI2007] 蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1 ...
- BZOJ 1066: [SCOI2007]蜥蜴( 最大流 )
结点容量..拆点然后随便写 --------------------------------------------------------------- #include<cstdio> ...
- 洛谷P2472 [SCOI2007]蜥蜴 题解
题目链接: https://www.luogu.org/problemnew/show/P2472 分析: 这道题用最大流解决. 首先构建模型. 一根柱子可以跳入和跳出,于是拆成两个点:入点和出点. ...
- poj 2711 Leapin' Lizards && BZOJ 1066: [SCOI2007]蜥蜴 最大流
题目链接:http://poj.org/problem?id=2711 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1066 Your p ...
- 【题解】Luogu P2472 [SCOI2007]蜥蜴
原题传送门 题目要求无法逃离的最少有多少 直接做肯定不好做,我们帮题目变一个说法:最多能逃离多少 这个询问一看就是最大流 考虑如何建图: 1.将S和每一个有蜥蜴的点连一条流量为1的边(每个蜥蜴只能用1 ...
- P2472 [SCOI2007]蜥蜴
传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...
随机推荐
- 解读Flex布局及其基本使用
Flex布局的基本内容: felx布局意为"弹性布局",主要用于为盒状模型提供最大的灵活性.被广泛的应用于移动端,PC端的响应式布局. 首先:定义盒子为flex布局: .box{ ...
- Thinkphp5 主动式 计划任务 支持windows和linux
百度搜索过相关的php计划任务的资料,特别是搜索thinkphp的计划任务,目前能明确实现的都是被动式的,就是通过tp3.2自带的计划任务类实现,通过挂钩子的形式,用户访问网站的时候就执行计划任务,这 ...
- Java基础系列(1)- JDK、JRE、JVM
Java三大版本(Write Once:Run Anywhere) JavaSE:标准版 JavaME:嵌入式开发 JavaEE:E企业级开发 JDK.JRE.JVM JDK是开发工具包 JRE是编译 ...
- Jmeter目录分析
通讯协议 最重要的基础知识. 性能测试的原理?通过协议模拟压力 jmeter目录结果解析 bin docs,文档 lib,存放库文件,所依赖的jar包 ext jmeter自己的jar包 jmeter ...
- css 参考手册 部署到本地
* 到css参考手册网站 http://css.doyoe.com/ 下载chm手册 * 到github下载对应的html页面 cd /Applications/XAMPP/htdocs git cl ...
- 『Python』matplotlib划分画布的主要函数
1. subplot() 绘制网格区域中几何形状相同的子区布局 函数签名有两种: subplot(numRows, numCols, plotNum) subplot(CRN) 都是整数,意思是将画布 ...
- Centos7下thinkphp5.0环境配置
首先把yum源修改为阿里的yum源,如果没有安装wget,先安装一个.(如果有请蹦过) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors ...
- Sql 小技巧(持续汇总)
身份证号加密 select concat(left(`visitors`.`Card_id`,3),'****',right(`visitors`.`Card_id`,4)) AS `Card_id` ...
- CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】
正题 题目链接:https://www.luogu.com.cn/problem/CF802O 题目大意 \(n\)天每条有\(a_i\)和\(b_i\). 每条可以花费\(a_i\)准备至多一道题, ...
- Springboot2.0整合Redis(注解开发)
一. pom.xm文件引入对应jar包 <dependency> <groupId>org.springframework.boot</groupId> <a ...