【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流
把石柱拆点,流量为高度
然后S与蜥蜴连流量1的边
互相能跳到的石柱连inf的边
石柱能到边界外的和T连inf的边
然后跑dinic就好了
/* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
const int N=;
const int inf=1e9;
struct edge{
int next,to,c;
}e[N+];
int ade=,S=,T=,n,m,c,d,CNT=;
int first[N+],dis[N+],now[N+],mp[][],I[][],O[][];
queue <int> Q; void addedge(int x,int y,int cap){
e[++ade].next=first[x];
e[ade].to=y;
e[ade].c=cap;
first[x]=ade;
e[++ade].next=first[y];
e[ade].to=x;
e[ade].c=;
first[y]=ade;
} #define s e[x].to
#define cap e[x].c
#define CAP e[x^1].c
bool bfs(){
for (int i=;i<=CNT;i++) dis[i]=inf;
Q.push(S);
dis[S]=;
while (!Q.empty()){
int p=Q.front();
Q.pop();
for (int x=first[p];x;x=e[x].next){
if (dis[s]>dis[p]+ && cap>){
Q.push(s);
dis[s]=dis[p]+;
}
}
}
return dis[T]!=inf;
} int dfs(int p,int mf){
if (p==T) return mf;
for (int x=now[p];x;x=e[x].next){
now[p]=x;
if (dis[s]==dis[p]+ && cap>){
int f=dfs(s,min(mf,cap));
if (f){
cap-=f;
CAP+=f;
return f;
}
}
}
return ;
}
#undef s
#undef cap
#undef CAP int dinic(){
int ans=,f;
while (bfs()){
for (int i=;i<=CNT;i++) now[i]=first[i];
while (f=dfs(S,inf)){
ans+=f;
}
}
return ans;
} void make_p(){
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
if (mp[i][j]){
addedge(I[i][j],O[i][j],mp[i][j]);
for (int x=i-d;x<=i+d;x++){
for (int y=j-d;y<=j+d;y++){
if (abs(i-x)+abs(j-y)>d) continue;
if (x< || x>n || y< || y>m) {addedge(O[i][j],T,inf); continue;}
if (mp[x][y] && (x!=i || y!=j)){addedge (O[i][j],I[x][y],inf); }
}
}
}
}
}
} int main(){
scanf("%d%d%d",&n,&m,&d);
for (int i=;i<=n;i++){
char s[];
scanf("%s",s+);
for (int j=;j<=m;j++){
mp[i][j]=s[j]-'';
if (mp[i][j]) I[i][j]=++CNT,O[i][j]=++CNT;
}
}
make_p();
for (int i=;i<=n;i++){
char s[];
scanf("%s",s+);
for (int j=;j<=m;j++){
if (s[j]=='L'){
addedge(S,I[i][j],);
c++;
}
}
}
printf("%d\n",c-dinic());
return ;
}
【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流的更多相关文章
- bzoj1066: [SCOI2007]蜥蜴(最大流)
1066: [SCOI2007]蜥蜴 题目:传送门 题解: 哇QTT大佬一眼秒算法...ORT 其实很容易就可以看出来是一道最大流 因为有边的使用限制,那么就可以直接当成是流量来处理嘛 因为是对点进行 ...
- BZOJ1066 [SCOI2007]蜥蜴 网络流 最大流 SAP
由于本题和HDU2732几乎相同,所以读者可以看-> HDU2732题解传送门: http://www.cnblogs.com/zhouzhendong/p/8362002.html
- BZOJ1066 SCOI2007 蜥蜴 【网络流-最大流】
BZOJ1066 SCOI2007 蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离 ...
- 【bzoj1066】[SCOI2007]蜥蜴 网络最大流
[bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...
- P2472 [SCOI2007]蜥蜴(最大流)
P2472 [SCOI2007]蜥蜴 自己第一道独立做题且一遍AC的网络流题纪念... 看到这道题我就想到网络流建图的方式了... 首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离, ...
- bzoj千题计划135:bzoj1066: [SCOI2007]蜥蜴
http://www.lydsy.com/JudgeOnline/problem.php?id=1066 每个柱子拆成两个点 i<<1,i<<1|1,之间连流量为高度的边 如果 ...
- 【BZOJ】1066: [SCOI2007]蜥蜴(最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1066 本题想一想应该懂了的. 我们想啊,,每个点都有限制,每个点都可以跳到另一个有限制的点,每个有蜥 ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- [BZOJ 1066] [SCOI2007] 蜥蜴 【最大流】
题目链接:BZOJ - 1066 题目分析 题目限制了高度为 x 的石柱最多可以有 x 只蜥蜴从上面跳起,那么就可以用网络流中的边的容量来限制.我们把每个石柱看作一个点,每个点拆成 i1, i2,从 ...
随机推荐
- 【DevExpress】1、SearchLookUpEdit详解
一.属性的基本介绍: 绑定数据源: lookUpEdit.Properties.ValueMember = 实际要用的字段; //相当于Editvalue lookUpEdit.Propertie ...
- linux安装xgboost
在学校服务器上安装xgboost,事先我已经安装了anaconda,但是因为师兄已经装了python所以没加入到path. 网上的方法一般都要编译,另外官方的下载方法要联网..总之出了一堆错,最终还是 ...
- linux启动优化:mdev -s自从…
转载请说明出处:http://control.blog.sina.com.cn/admin/article/article_add.php 近期工作中遇到的问题如下: linux启动后加载根文件系统时 ...
- JS中使用正则表达式
- Leetcode:ZigZag Conversion分析和实现
问题的大意就是将字符串中的字符按锯齿状(倒N形)垂直由上向下放置,最后水平从左向右读取.比如 ABCDEFGHIJKLMN,4表示 A G M B F H ...
- inux下安装ab
1,APR 下载地址:http://apr.apache.org/download.cgi 1)tar -zxf apr-1.4.5.tar.gz ./configure --prefix=/u ...
- php常用 随机数
<?php $number =range(1,50); //shuffle 将数组顺序随即打乱. shuffle($number); print_r($number); echo '<br ...
- 414. Third Maximum Number数组中第三大的数字
[抄题]: Given a non-empty array of integers, return the third maximum number in this array. If it does ...
- Virtual Machine Definition File 2.2
Virtual Machine Definition File 2.2 http://archives.opennebula.org/documentation:archives:rel2.2:tem ...
- 15.select into
select into SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档. CREATE TABLE ...