bzoj1066
首先,我们可以想到从源点向每个有蜥蜴的地方连边,然后拆点,因为我们不能把一个点连向多条边,这样修改边的时候不可以,所以拆个点,就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int inf=0x3f3f3f3f;
struct edge
{
int to,nxt,f;
}e[];
string s;
int r,c,d,ans,cnt=,tot;
int board[][];
int g[],dist[];
void link(int u,int v,int f)
{
e[++cnt].nxt=g[u];
g[u]=cnt;
e[cnt].f=f;
e[cnt].to=v;
}
inline int Min(int x,int y)
{
return x<y?x:y;
}
inline int abs(int x)
{
return x<?-x:x;
}
inline int Max(int x,int y)
{
return x>y?x:y;
}
inline void ins(int u,int v,int f)
{
link(u,v,f); link(v,u,);
}
bool bfs()
{
queue<int>q;
memset(dist,inf,sizeof(dist));
dist[]=;
q.push();
while(!q.empty())
{
int u=q.front(); q.pop();
for(int i=g[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(e[i].f&&dist[v]==inf)
{
dist[v]=dist[u]+;
q.push(v);
}
}
}
return dist[]!=inf;
}
int dfs(int u,int delta)
{
if(u==) return delta;
int ret=;
for(int i=g[u];i&δi=e[i].nxt)
{
int v=e[i].to;
if(e[i].f&&dist[v]==dist[u]+)
{
int dd=dfs(v,Min(e[i].f,delta));
delta-=dd;
e[i].f-=dd;
e[i^].f+=dd;
ret+=dd;
}
}
return ret;
}
inline void dinic()
{
while(bfs())
{
ans+=dfs(,inf);
}
printf("%d",tot-ans);
}
int main()
{
cin>>r>>c>>d;
for(int i=;i<=r;i++)
{
cin>>s;
for(int j=;j<s.length();j++)
{
board[i][j+]=s[j]-'';
}
}
for(int i=;i<=r;i++)
for(int j=;j<=c;j++) if(board[i][j])
{
ins((i-)*c+j,(i-)*c+j+r*c,board[i][j]);
if(j-d<=||j+d>c||i-d<=||i+d>r)
{
ins((i-)*c+j+r*c,,board[i][j]);
}
for(int a=Max(,i-d);a<=Min(i+d,r);a++)
for(int b=Max(,j-d);b<=Min(j+d,c);b++)
if(abs(a-i)+abs(b-j)<=d&&board[a][b])
ins((i-)*c+j+r*c,(a-)*c+b,inf);
}
for(int i=;i<=r;i++)
{
cin>>s;
for(int j=;j<s.length();j++)
{
if(s[j]=='L') {tot++; ins(,(i-)*c+j+,);}
}
}
dinic();
return ;
}
bzoj1066的更多相关文章
- 【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\) 列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥 ...
- BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- [bzoj1066] [SCOI2007] 蜥蜴 - 网络流
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个 ...
- bzoj1066 蜥蜴 (dinic)
最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...
- BZOJ1066 [SCOI2007]蜥蜴 网络流 最大流 SAP
由于本题和HDU2732几乎相同,所以读者可以看-> HDU2732题解传送门: http://www.cnblogs.com/zhouzhendong/p/8362002.html
随机推荐
- NOIP2007矩阵取数[DP|高精度]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- u3d_shader_surface_shader_3
参考http://my.oschina.net/u/138823/blog/181131 加了个凹凸贴图: 抱歉把女神苏菲做成这样. 一:Normal Texture的制作: 1.首先是Normal ...
- 使用javascript对密码进行有密码强度提示的验证
好些网站的注册功能中,都有对密码进行验证并且还有强度提示.下面就来实现这种效果.密码强度说明:密码强度:弱——纯数字,纯字母,纯符号密码强度:中——数字,字母,符号任意两种的组合密码强度:强——数字, ...
- android studio 中 .9.png的制作
折腾好久,最后在一个群里面咨询一个朋友才弄好的,用的是1.2.2版,感觉对.9的支持不太好, 1,用一张干净的png图片放在mipmap里面. 2,点击图片右键最后一项,create 9-patch ...
- javascript中的链表结构
1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...
- Windows Server 2008 R2中的ASP.NET环境架设
.NET Framework的部分功能在Windows Server 2008 R2得到支持,包括:.NET 2/3/3.5的子集和ASP.NET.另外,PowerShell也在Server Core ...
- Android手机浏览器访问本地网络相关问题
为了测试开发的手机网站,常常需要使手机直接访问本地网络. 在这个过程中碰到几个问题,记下来供以后参考 1. 在本地主机运行apache后,使用localhost和127.0.0.1可以访问页面,但使用 ...
- POJ 3714 Raid
Description After successive failures in the battles against the Union, the Empire retreated to its ...
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- shell note
1 输出重定向:ll > aaa 将输出内容 添加到aaa文件中 ll >> aaa将输出内容追加到aaa中 ll &>> abc 将输出内容不论正确或错误都保存 ...