Leapin' Lizards(hdu 2732)
Leapin' Lizards
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2080 Accepted Submission(s): 857
platoon of wandering lizards has entered a strange room in the
labyrinth you are exploring. As you are looking around for hidden
treasures, one of the rookies steps on an innocent-looking stone and the
room's floor suddenly disappears! Each lizard in your platoon is left
standing on a fragile-looking pillar, and a fire begins to rage below...
Leave no lizard behind! Get as many lizards as possible out of the
room, and report the number of casualties.
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 file will begin with a line containing a single integer
representing the number of test cases, which is at most 25. Each test
case will begin with a line containing a single positive integer n
representing the number of rows in the map, followed by a single
non-negative integer d representing the maximum leaping distance for the
lizards. Two maps will follow, each as a map of characters with one row
per line. The first map will contain a digit (0-3) in each position
representing the number of jumps the pillar in that position will
sustain before collapsing (0 means there is no pillar there). The second
map will follow, with an 'L' for every position where a lizard is on
the pillar and a '.' for every empty pillar. There will never be a
lizard on a position where there is no pillar.Each input map is
guaranteed to be a rectangle of size n x m, where 1 ≤ n ≤ 20 and 1 ≤ m ≤
20. The leaping distance is
always 1 ≤ d ≤ 3.
each input case, print a single line containing the number of lizards
that could not escape. The format should follow the samples provided
below.
1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<iostream>
5 #include<string.h>
6 #include<vector>
7 #include<queue>
8 using namespace std;
9 struct node
10 {
11 int to;
12 int cap;
13 int rev;
14 };
15 char str[30][30];
16 char str2[30][30];
17 int id[30][30];
18 int level[100000];
19 vector<node>vec[100000];
20 const int N=1e8;
21 int iter[100000];
22 void add(int from,int to,int cap);
23 void bfs(int s);
24 int dfs(int s,int t,int f);
25 int max_flow(int s,int t);
26 int main(void)
27 {
28 int i,j,k;
29 scanf("%d",&k);
30 int s;
31 int p,q;
32 for(s=1; s<=k; s++)
33 {
34 scanf("%d %d ",&p,&q);
35 for(i=0; i<100000; i++)
36 vec[i].clear();
37 for(i=0; i<p; i++)
38 {
39 scanf("%s",str[i]);
40 }
41 for(i=0; i<p; i++)
42 {
43 scanf("%s",str2[i]);
44 }
45 int l=strlen(str[0]);
46 int ans=1;
47 for(i=0; i<p; i++)
48 {
49 for(j=0; j<l; j++)
50 {
51 id[i][j]=ans++;
52 }
53 }
54 ans-=1;
55 int x,y;
56 for(i=0; i<p; i++)
57 {
58 for(j=0; j<l; j++)
59 {
60 if(str[i][j]>'0')
61 add(id[i][j],id[i][j]+ans,str[i][j]-'0');
62 }
63 }
64 for(i=0; i<p; i++)
65 {
66 for(j=0; j<l; j++)
67 {
68 for(x=0; x<p; x++)
69 {
70 for(y=0; y<l; y++)
71 {
72 if(i!=x||j!=y)
73 {
74 if(abs(x-i)+abs(j-y)<=q)
75 {
76 add(id[i][j]+ans,id[x][y],N);
77 }
78 }
79 }
80 }
81 }
82 }
83 for(i=0; i<p; i++)
84 {
85 for(j=0; j<l; j++)
86 {
87 int cc=abs(i+1);
88 int dd=abs(p-i);
89 cc=min(cc,dd);
90 int kk=abs(j+1);
91 int vv=abs(l-j);
92 vv=min(kk,vv);
93 if((vv<=q||cc<=q))
94 {
95 add(id[i][j]+ans,2*ans+1,N);
96 }
97 }
98 }
99 int fuck=0;
100 for(i=0; i<p; i++)
101 {
102 for(j=0; j<l; j++)
103 {
104 if(str2[i][j]=='L')
105 {
106 add(0,id[i][j],1);
107 fuck++;
108 }
109 }
110 }
111 int sum=max_flow(0,2*ans+1);
112 printf("Case #%d: ",s);
113 if(fuck-sum==1)
114 printf("%d lizard was left behind.\n",fuck-sum);
115 else if(fuck-sum==0) printf("no lizard was left behind.\n");
116 else printf("%d lizards were left behind.\n",fuck-sum);
117 }
118 }
119 void add(int from,int to,int cap)
120 {
121 node nn;
122 nn.to=to;
123 nn.cap=cap;
124 nn.rev=vec[to].size();
125 vec[from].push_back(nn);
126 nn.to=from;
127 nn.cap=0;
128 nn.rev=vec[from].size()-1;
129 vec[to].push_back(nn);
130 }
131 void bfs(int s)
132 {
133 queue<int>que;
134 memset(level,-1,sizeof(level));
135 level[s]=0;
136 que.push(s);
137 while(!que.empty())
138 {
139 int v=que.front();
140 que.pop();
141 int i;
142 for(i=0; i<vec[v].size(); i++)
143 {
144 node e=vec[v][i];
145 if(level[e.to]==-1&&e.cap>0)
146 {
147 level[e.to]=level[v]+1;
148 que.push(e.to);
149 }
150 }
151 }
152 }
153 int dfs(int s,int t,int f)
154 {
155 if(s==t)
156 return f;
157 for(int &i=iter[s]; i<vec[s].size(); i++)
158 {
159 node &e=vec[s][i];
160 if(level[e.to]>level[s]&&e.cap>0)
161 {
162 int r=dfs(e.to,t,min(e.cap,f));
163 if(r>0)
164 {
165 e.cap-=r;
166 vec[e.to][e.rev].cap+=r;
167 return r;
168 }
169 }
170 }
171 return 0;
172 }
173 int max_flow(int s,int t)
174 {
175 int flow=0;
176 for(;;)
177 {
178 bfs(s);
179 if(level[t]<0)return flow;
180 memset(iter,0,sizeof(iter));
181 int f;
182 while((f=dfs(s,t,N))>0)
183 {
184 flow+=f;
185 }
186 }
187 }
Leapin' Lizards(hdu 2732)的更多相关文章
- 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. 如果大家要做网络流的题目,我在网上看到一个家伙,他那里列出了一堆网络流的题目, ...
- K - Leapin' Lizards - HDU 2732(最大流)
题意:在一个迷宫里面有一些蜥蜴,这个迷宫有一些柱子组成的,并且这些柱子都有一个耐久值,每当一只蜥蜴跳过耐久值就会减一,当耐久值为0的时候这个柱子就不能使用了,每个蜥蜴都有一个最大跳跃值d,现在想知道有 ...
- Leapin' Lizards HDU - 2732 (恶心的建图。。)
这道题其实不难...就是建图恶心了点....emm... 题意: 多源多汇 + 拆边 青蛙跳柱子, 每根柱子都有一定的承载能力, 青蛙跳上去之后柱子的承载能力就会减一,跳到边界就能活 跳不到就over ...
- Leapin' Lizards [HDU - 2732]【网络流最大流】
题目链接 网络流直接最大流就是了,只是要拆点小心一个点的流超出了原本的正常范围才是. #include <iostream> #include <cstdio> #includ ...
- K - Leapin' Lizards HDU - 2732 网络流
题目链接:https://vjudge.net/contest/299467#problem/K 这个题目从数据范围来看可以发现是网络流,怎么建图呢?这个其实不是特别难,主要是读题难. 这个建图就是把 ...
- HDU 2732 Leapin' Lizards(拆点+最大流)
HDU 2732 Leapin' Lizards 题目链接 题意:有一些蜥蜴在一个迷宫里面,有一个跳跃力表示能跳到多远的柱子,然后每根柱子最多被跳一定次数,求这些蜥蜴还有多少是不管怎样都逃不出来的. ...
- Leapin' Lizards(经典建图,最大流)
Leapin' Lizards http://acm.hdu.edu.cn/showproblem.php?pid=2732 Time Limit: 2000/1000 MS (Java/Others ...
- HDU2732:Leapin' Lizards(最大流)
Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- C语言入坑指南-数组之谜
前言 在C语言中,数组和指针似乎总是"暧昧不清",有时候很容易把它们混淆.本文就来理一理数组和指针之间到底有哪些异同. 数组回顾 在分析之前,我们不妨回顾一下数组的知识.数组是可以 ...
- 字符串String的trim()方法
用来删除字符串两端的空白字符并返回,trim方法并不影响原来的字符串本身,它返回的是一个新的字符串 String a = " Hello World "; String b = ...
- A Child's History of England.43
PART THE SECOND When the King heard how Thomas à Becket had lost his life in Canterbury Cathedral, t ...
- accurate, accuse
accurate accurate(不是acute)和precise是近义词,precise里有个pre,又和excise(切除, 不是exercise),concise一样有cise.Why? 准确 ...
- day14函数递归调用
day14函数递归调用 1.装饰器叠加 def deco1(func1): def wrapper1(*args,**kwargs): print('=====>wrapper1 ') res1 ...
- 【leetcode】85. Maximal Rectangle(单调栈)
Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...
- vue实现input输入框的模糊查询
最近在用uni-app做一个项目,使用的框架还是vue,想了好久才做出来 . HTML代码部分 <input type="text" focus class="s ...
- 【科研工具】CAJViewer的一些操作
逐渐发现CAJViewer没有想象中的难用. 添加书签:Ctrl+M 使用按类分类,可以筛选出书签位置,和注释区分. 搜索:Ctrl+F 可以定义多种搜索.
- C#内建接口:IEnumerable
这节讲一下接口IEnumerable. 01 什么是Enumerable 在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影.那什么是Enumerable呢?首先它跟C#中的e ...
- collection库更新1.4.0版本
collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...