BZOJ1066_蜥蜴_KEY
经过长时间的旅行,很长时间没写过博客了,这次把上次WA的题目过了。
由于每次蜥蜴从石柱上跳下时,石柱的高度会-1,可以看做占了一格的流量。
建图:
1.建超级源和超级汇,设超级源连到每只蜥蜴的边容量为1,每个可以跳到外面的点连到超级汇的边的容量为maxlongint。
2.对于每个点建一个虚点,连边到此虚点,边容量为该点石柱高度。对于每个可以互相跳到的点,建立容量为maxlongint的边。这样当前点到其他点的总容量为该点的石柱高度。(拆点)
然后跑一遍Dinic就好了。
注意用蜥蜴的总数减去最大流才是答案。
code:
/**************************************************************
Problem: 1066
User: yekehe
Language: C++
Result: Accepted
Time:40 ms
Memory:6380 kb
****************************************************************/ #include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
using namespace std; int r,c,d,a[][],L;
string S; int head[],nxt[],W[],To[],cnt;
void add(int x,int y,int c)
{
W[cnt]=c;
To[cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
cnt++;
} int check(int x,int y,int fx,int fy)
{
return (x-fx)*(x-fx)+(y-fy)*(y-fy)<=d*d;
} int l[],dist[];
int BFS()
{
int tl=,hd=;
hd=tl=;
l[++tl]=;
memset(dist,-,sizeof dist);
dist[]=;
while(hd<tl){
int front=l[++hd];
for(int i=head[front];i!=-;i=nxt[i]){
if(dist[To[i]]==- && W[i]){
dist[To[i]]=dist[front]+;
l[++tl]=To[i];
}
}
}
return dist[r*c*+]!=-;
} int DFS(int now,int x)
{
if(now==r*c*+ || !x)return x;
int res=;
for(int i=head[now];i!=- && x;i=nxt[i]){
if(dist[now]+==dist[To[i]]&&W[i]){
int DK=DFS(To[i],min(x,W[i]));
W[i]-=DK;W[i^]+=DK;
x-=DK;res+=DK;
}
}
if(!res)dist[now]=-;
return res;
} void Dinic()
{
int ans=;
while(BFS())
ans+=DFS(,2e9);
printf("%d",L-ans);
return ;
} int main()
{
// freopen("x.txt","r",stdin);
scanf("%d%d%d",&r,&c,&d);
memset(nxt,-,sizeof nxt);
memset(head,-,sizeof head);
register int i,j,k,h;
#define Size ( r*c )
#define fr ( (i-1)*c+j )
#define to ( (k-1)*c+h )
for(i=;i<=r;i++){
cin>>S;
for(j=;j<S.size();j++){
a[i][j+]=S[j]-'';
}
}
for(i=;i<=r;i++){
cin>>S;
for(j=;j<=S.size();j++){
if(S[j-]=='L'){
L++;//求蜥蜴总数
add(,fr,);
add(fr,,);
}
}
}
for(i=;i<=r;i++)
for(j=;j<=c;j++){
if(!a[i][j])continue;
add(fr,fr+Size,a[i][j]);
add(fr+Size,fr,);
for(k=;k<=r;k++)
for(h=;h<=c;h++){
if(i==k&&j==h)continue;
if(a[k][h]/*减少边的总量*/&&check(i,j,k,h)){
add(fr+Size,to,2e9);
add(to,fr+Size,);
}
}
}
for(i=;i<=r;i++)
for(j=;j<=c;j++){
if(i<=d || j<=d || r-i+<=d || c-j+<=d){
if(!a[i][j])continue;//减少边的总量
add(fr+Size,Size<<|,2e9);
add(Size<<|,fr+Size,);
}
}
Dinic();
return ;
}
BZOJ1066_蜥蜴_KEY的更多相关文章
- 1066: [SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3545 Solved: 1771[Submit][Status] ...
- bzoj 1066 蜥蜴
最大流. 建图:首先将每根柱子拆成两个点. 每根柱子的入点向出点连一条容量为柱子高度的边. 每根柱子的出点向可以到达的柱子的入点连一条容量为正无穷的边. 源点向每根初始有蜥蜴的柱子的入点连一条容量为一 ...
- BZOJ 1066 【SCOI2007】 蜥蜴
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为$1$,蜥蜴的跳跃距离是d,即蜥蜴可以跳 ...
- 蜥蜴(bzoj 1066)
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平 ...
- BZOJ-1066 蜥蜴 最大流+拆点+超级源超级汇
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2582 Solved: 1272 [Submit][Status] ...
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: ...
- 【bzoj1066】[SCOI2007]蜥蜴 网络最大流
[bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...
- 【BZOJ】1066: [SCOI2007]蜥蜴(最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1066 本题想一想应该懂了的. 我们想啊,,每个点都有限制,每个点都可以跳到另一个有限制的点,每个有蜥 ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
随机推荐
- 二、基于事件的异步编程模式(EAP)
一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式--APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题--不支持对异步操作的取消和没有提供对进 ...
- [python]emlog相册插件getshell exploit
昨天本站转载了emlog相册插件的漏洞分析文章,当然也有html版的getshell代码,喜欢的同学们可以直接用昨天文章中分享的代码.为了练习python,小弟用python又重写了一次,喜欢的同学们 ...
- 使用burpsuite对移动app抓包分析
测试移动APP的联网请求,需要获取路径或者参数的时候,使用该工具burpsuite非常方便! 要求: 移动终端和PC处于同一个wlan环境下 第一步:获取本地地址,cmd-->ipconfig ...
- Allocate exception for servlet ValidateUsernameServlet 异常
如果eclipse无法对类文件进行编译那么运行时就会发生 Allocate exception for servlet ValidateUsernameServlet 异常,说找不到类.
- oracle 日期常用函數sysdate
SYSDATE 2 --◎ 可得到目前系統的時間 3 4 ex. 5 select sysdate from dual; 6 ...
- 3.为JDeveloper添加不能的workspace
1.点击选中JDeveloper,在属性中,选中快捷方式, 可以看到目标中的值为C:\Oracle\Middleware\jdeveloper\jdeveloper.exe, 只需要在修改为C:\Or ...
- sql时间格式转换
sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...
- Javascript 中 Array的 sort()和 compare()方法
Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字. 我们 ...
- vector erase
vector::erase 从指定容器删除指定的元素 两个重载: iterator erase (iterator position);删除指定位置position的元素,并返回删除元素的下一个元素的 ...
- 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...