bzoj1066 蜥蜴
Description
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。
Input
输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。
Output
输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。
最大流
每条石柱拆成两个点,连边容量为石柱高度
在距离不超过d的石柱间连边,容量为inf
从源点连边到每条有蜥蜴的石柱,容量为1
从可以跳到图外的点连边到汇点,容量为inf
#include<cstdio>
#include<cstring>
struct edge{
int nx,w;
edge(){}
edge(int a,int b){
nx=a;
w=b;
}
}es[];
int ep=;
const int S=,T=,INF=;
int g[][],gp=;
int h[];
int v[][];
int q[];
int n,m,ans=,mx,ls=;
int ids[][],idp=;
int hs[][];
char c;
inline int min(int a,int b){return a<b?a:b;}
inline void addedge(int s,int t,int w){
es[ep]=edge(t,w);
g[gp][]=ep++;
g[gp][]=g[s][];
g[s][]=gp++;
es[ep]=edge(s,);
g[gp][]=ep++;
g[gp][]=g[t][];
g[t][]=gp++;
}
inline bool bfs(){
int qs=,qe=;
q[qe++]=S;
memset(h,-,sizeof h);
h[S]=;
while(qs<qe){
int w=q[qs++];
int i=w;
while(i=g[i][]){
int e=g[i][];
int u=es[e].nx;
if(h[u]!=-||!es[e].w)continue;
h[u]=h[w]+;
q[qe++]=u;
}
}
return h[T]!=-;
}
int dfs(int w,int f){
if(w==T)return f;
int i=w;
int used=,c;
while(i=g[i][]){
int e=g[i][];
int u=es[e].nx;
if(h[u]!=h[w]+||es[e].w==)continue;
c=f-used;
c=dfs(u,min(c,es[e].w));
es[e].w-=c;
es[e^].w+=c;
used+=c;
if(used==f)return f;
}
if(!used)h[w]=-;
return used;
}
char gc(){
char c=getchar();
while((c<''||c>'')&&c!='L'&&c!='.')c=getchar();
return c;
}
int main(){
scanf("%d%d%d",&n,&m,&mx);
for(int i=;i<n;i++)
for(int j=;j<m;j++)
ids[i][j]=idp++;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
c=gc();
hs[i][j]=c-'';
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(hs[i][j]>){
addedge(ids[i][j],ids[i][j]+n*m,hs[i][j]);
bool o=;
for(int x=-mx;x<=mx;x++){
for(int y=-mx;y<=mx;y++){
if(x*x+y*y>mx*mx)continue;
if(i+x<||i+x>=n||j+y<||j+y>=m){
o=;
continue;
}
if(hs[i+x][j+y]==)continue;
addedge(ids[i][j]+n*m,ids[i+x][j+y],INF);
}
}
if(o)addedge(ids[i][j]+n*m,T,INF);
}
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
c=gc();
if(c=='L')addedge(S,ids[i][j],),ls++;
}
}
while(bfs())ans+=dfs(S,INF);
printf("%d",ls-ans);
return ;
}
bzoj1066 蜥蜴的更多相关文章
- BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...
- bzoj1066 蜥蜴 (dinic)
最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...
- 【蒟蒻の进阶PLAN】 置顶+持续连载
看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...
- 【bzoj1066】[SCOI2007]蜥蜴 网络最大流
[bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...
- BZOJ1066 SCOI2007 蜥蜴 【网络流-最大流】
BZOJ1066 SCOI2007 蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离 ...
- 【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流
[bzoj1066]: [SCOI2007]蜥蜴 把石柱拆点,流量为高度 然后S与蜥蜴连流量1的边 互相能跳到的石柱连inf的边 石柱能到边界外的和T连inf的边 然后跑dinic就好了 /* htt ...
- [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴
[BZOJ1066][luogu_P2472][SCOI2007]蜥蜴 试题描述 在一个 \(r\) 行 \(c\) 列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥 ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- [bzoj1066] [SCOI2007] 蜥蜴 - 网络流
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个 ...
随机推荐
- Bat脚本:通过端口号查找进程号
最近在用jenkins做自动化web部署,web服务器是tomcat. 遇到了这样一个问题:在服务器上执行tomcat的shutdown.bat命令可以正常关机,但用jenkins执行shutdown ...
- <NET CLR via c# 第4版> 读书笔记--目录
<NET CLR via c# 第4版>个别章节虽读过多次,但始终没有完整读过这本书.即使看过的那些,时间一长,也忘记了大部分.趁着最近不忙,想把这本书好好读一遍,顺便记下笔记,方便随时查 ...
- 不挣扎了,MVC验证错误信息汇总是酱紫的
public static string GetModelErros(this ModelStateDictionary dic) { var sb = new StringBuilder(); va ...
- 2019.1.5 China’s population
China’s population is expected to hit a peak of 1.44 billion in 2029, and start to experience negati ...
- Python 文件路径
# 文件路径: # 1. 相对路径: 相对于当前程序所在的文件夹, 如果在文件夹内, 随便找, 直接写名字 # 如果不在这个文件夹内, 可能需要出文件夹或者进文件夹 # 出文件夹 ../ # 进文件夹 ...
- 【转】react的高阶组件
React进阶之高阶组件 前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只 ...
- 腾讯云nginx配置PHP
腾讯云nginx配置文件 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log ...
- NBUT 1217 Dinner 2010辽宁省赛
Time limit 1000 ms Memory limit 32768 kB Little A is one member of ACM team. He had just won the g ...
- 了解WCF的前世今生之实现服务端(一)
http://www.cnblogs.com/jiagoushi/archive/2013/03/15/2962351.html 1.WCF是对现有的分布式通信技术的一个整合,其中包括Com/DCom ...
- Win10:已禁用IME
问题 windows10莫名其妙地禁用了IME,导致的结果便是浏览器不能输入中文. 百度搜索的答案都是tmd 控制中心-->管理-->任务XXX,但是我的 任务XXX打不开啊. 解决 go ...