hdu2732 Leapin' Lizards (网络流dinic)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
The pillars in the room are aligned as a grid, with each pillar one unit away from the pillars to its east, west, north and south. Pillars at the edge of the grid are one unit away from the edge of the room (safety). Not all pillars necessarily have a lizard. A lizard is able to leap onto any unoccupied pillar that is within d units of his current one. A lizard standing on a pillar within leaping distance of the edge of the room may always leap to safety... but there's a catch: each pillar becomes weakened after each jump, and will soon collapse and no longer be usable by other lizards. Leaping onto a pillar does not cause it to weaken or collapse; only leaping off of it causes it to weaken and eventually collapse. Only one lizard may be on a pillar at any given time.
Input
always 1 ≤ d ≤ 3.
Output
Case #2: no lizard was left behind.
Case #3: 3 lizards were left behind.
Case #4: 1 lizard was left behind.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int INF = 1e9;
const double eps = 1e-;
const int maxn = ;
int cas = ; struct Edge{
int from,to,cap,flow;
Edge() {}
Edge(int a,int b,int c,int d)
{
from=a,to=b,cap=c,flow=d;
}
}; struct Dinic{
int n,m,s,t;
vector<Edge> edges;
vector<int> G[maxn];
bool vis[maxn];
int d[maxn];
int cur[maxn];
void AddEdge(int from,int to,int cap)
{
edges.push_back(Edge(from,to,cap,));
edges.push_back(Edge(to,from,,));
m=edges.size();
G[from].push_back(m-);
G[to].push_back(m-);
}
void init(int x)
{
memset(d,,sizeof(d));
edges.clear();
for(int i=;i<=x;i++)
G[i].clear();
}
bool BFS()
{
memset(vis,,sizeof(vis));
queue<int> Q;
Q.push(s);
d[s]=;
vis[s]=;
while(!Q.empty())
{
int x=Q.front(); Q.pop();
for(int i=;i<G[x].size();i++)
{
Edge &e = edges[G[x][i]];
if(!vis[e.to] && e.cap>e.flow)
{
vis[e.to]=;
d[e.to]=d[x]+;
Q.push(e.to);
}
}
}
return vis[t];
}
int DFS(int x,int a)
{
if(x==t || a==) return a;
int flow = , f;
for(int &i=cur[x];i<G[x].size();i++)
{
Edge &e=edges[G[x][i]];
if(d[x]+==d[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow)))>)
{
e.flow += f;
edges[G[x][i]^].flow -= f;
flow += f;
a -= f;
if(a==) break;
}
}
return flow;
}
int Maxflow(int s,int t)
{
this->s=s; this->t=t;
int flow = ;
while(BFS())
{
memset(cur,,sizeof(cur));
flow+=DFS(s,INF);
}
return flow;
}
}; Dinic dinic;
int n,m,d;
char g1[][],g2[][];
inline int id_p(int x,int y) {return (x*m+y)*;}
inline int id_l(int x,int y) {return x*m+y+;}
inline bool inside(int x,int y) {return x>= && x<=n && y>= && y<=m;}
int s = , t = ;
inline bool canout(int i,int j)
{
// cout<<i<<' '<<j<<endl;
for(int x=i-d;x<=i+d;x++)
for(int y=j-d;y<=j+d;y++)
{
if(abs(x-i)+abs(y-j)>d || (x==i && y==j)) continue;
if(!inside(x,y)) return ;
}
return ;
}
void run()
{
scanf("%d%d",&n,&d);
for(int i=;i<=n;i++)
scanf("%s",g1[i]+);
for(int i=;i<=n;i++)
scanf("%s",g2[i]+);
m=strlen(g1[]+);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
g1[i][j]-='';
dinic.init(t);
int sum = ;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(g1[i][j]==) continue;
int u1 = id_p(i,j);
int u2 = u1^;
dinic.AddEdge(u1,u2,g1[i][j]);
for(int x=i-d;x<=i+d;x++)
for(int y=j-d;y<=j+d;y++)
{
if(abs(x-i)+abs(y-j)>d || (x==i && y==j)) continue;
if(!inside(x,y))
{
dinic.AddEdge(u2,t,g1[i][j]);
goto bk;
}
else
{
dinic.AddEdge(u2,id_p(x,y),g1[i][j]);
}
}
bk:;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(g2[i][j]!='L') continue;
if(g1[i][j]== && canout(i,j)) continue;
sum++;
dinic.AddEdge(s,id_l(i,j),);
dinic.AddEdge(id_l(i,j),id_p(i,j),);
}
int ans = sum - dinic.Maxflow(s,t);
printf("Case #%d: ",cas++); //cout<<sum<<' ';
if(ans==) puts("no lizard was left behind.");
else if(ans==) puts("1 lizard was left behind.");
else printf("%d lizards were left behind.\n",ans);
} int main()
{
#ifdef LOCAL
freopen("case.txt","r",stdin);
#endif
int _;
scanf("%d",&_);
while(_--)
run();
return ;
}
hdu2732 Leapin' Lizards (网络流dinic)的更多相关文章
- HDU2732 Leapin' Lizards 网络流 最大流 SAP
原文链接http://www.cnblogs.com/zhouzhendong/p/8362002.html 题目传送门 - HDU2732 题意概括 给你一个网格,网格上的一些位置上有一只蜥蜴,所有 ...
- HDU2732 Leapin' Lizards —— 最大流、拆点
题目链接:https://vjudge.net/problem/HDU-2732 Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU2732 Leapin' Lizards
Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu2732 Leapin' Lizards 最大流+拆点
Your platoon of wandering lizards has entered a strange room in the labyrinth you are exploring. As ...
- HDU2732 Leapin' Lizards 最大流
题目 题意: t组输入,然后地图有n行m列,且n,m<=20.有一个最大跳跃距离d.后面输入一个n行的地图,每一个位置有一个值,代表这个位置的柱子可以经过多少个猴子.之后再输入一个地图'L'代表 ...
- POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)
POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...
- 【解题报告】 Leapin' Lizards HDU 2732 网络流
[解题报告] Leapin' Lizards HDU 2732 网络流 题外话 在正式讲这个题目之前我想先说几件事 1. 如果大家要做网络流的题目,我在网上看到一个家伙,他那里列出了一堆网络流的题目, ...
- HDU2732:Leapin' Lizards(最大流)
Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Leapin' Lizards
Leapin' Lizards 题目大意: 在一个网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴 ...
随机推荐
- iOS:苹果企业证书通过网页分发安装app
本文转载至 http://blog.sina.com.cn/s/blog_6afb7d800101fa16.html 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限.为了方便 ...
- centos7 执行一个数据库脚本创建项目中的数据库
[root@localhost ~]# su postgres 切换用户 bash-4.2$ psql could not change directory to "/root": ...
- 【C语言天天练(十)】结构体
引言:数据常常以成组的形式存在.在C中,使用结构能够把不同类型的值存放在一起. 结构的声明有两种 1.struct SIMPLE{ int a; char b; float c; };然后用标签SIM ...
- Machine Learning in Action(4) Logistic Regression
从这节算是开始进入“正规”的机器学习了吧,之所以“正规”因为它开始要建立价值函数(cost function),接着优化价值函数求出权重,然后测试验证.这整套的流程是机器学习必经环节.今天要学习的话题 ...
- 通过JMX获取weblogic的监控指标
通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息.主要用到weblogic自己的t3协议,所以要用到weblogic的jar包:wlfullcl ...
- ubuntu nohup命令用法
让程序在后台运行 该命令的一般形式nohup command & 程序在后台运行并打印日志 nohup ./china_fund.py > china_fund.file 2>&a ...
- debian支持的系统架构介绍
debian系统支持类型有armel.armhf.i386.amd64.mips.mipsel, powerpc.sparc.s390.s390x等. 详细对比文章见https://www.debia ...
- 如何设置确认selinux 模式【转】
本文转载自:http://blog.csdn.net/lei1217/article/details/48377109 [Description]linux SELinux 分成Enforce 以及 ...
- C# 计时器 以“天时分秒毫秒”形式动态增加显示
参考:http://zhidao.baidu.com/link?url=j-jxQJenrO54BSKJ_IkXWbhdDqbVLUyyenjjSGs8G0xdisgBZ0EMhzyWgARSFct6 ...
- consider increasing the maximum size of the cache.
虚拟机上搭建jenkins,出现unable to free [10] percent of the cache for Context [/jenkins] 提示让我加大缓存 consider in ...