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]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
随机推荐
- jq实现随机显示部分图片在页面上(兼容IE5)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- java的串行化
参考博客:Java 对象的串行化(Serialization) 1,什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象 ...
- SpringMVC错误小结
No mapping found for HTTP request with URI [/SpringMVC/user.do] in DispatcherServlet with name 'spri ...
- CF#538(div2) B. Yet Another Array Partitioning Task 【YY】
任意门:http://codeforces.com/contest/1114/problem/B B. Yet Another Array Partitioning Task time limit p ...
- 2spring注解:@Lazy,@Conditional,@import,FactoryBean接口
大致的工程内容也来源于上一篇博文! https://www.cnblogs.com/Mrchengs/p/10108603.html 1.@Lazy懒加载 懒加载:针对单实例的 单实例bean,默认在 ...
- IDEA+MAVEN构建一个webapp骨架项目(解决一直卡在downloading plugins for问题)
下载:链接:https://pan.baidu.com/s/1jJx73H8 密码:nud0 第一步 我在上面链接下载了这个骨架xml,放进本地(你的目录默认.m2)\repository\org ...
- HashMap和Hashtable的详细区别
1.Hashtable是线程安全,HashMap是非线程安全 HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用 ...
- datagrid和combobox简单应用
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 11572 - Unique Snowflakes(贪心,两指针滑动保存子段最大长度)
Emily the entrepreneur has a cool business idea: packaging and selling snowflakes. She has devised a ...
- stylus(css预编译器)
推荐去张鑫旭大神这里详细了解:http://www.zhangxinxu.com/jq/stylus/ 安装 npm install -g stylus 自动编译 $ stylus -w demo.s ...