梯田(dfs)
Total Submission: 26 Submission Accepted: 5
一块田地被淹的条件为:
一、它自身的高度<=h
二、它相邻的四块田地中至少有一块被淹没
我们可以认为,海啸发动的时候,梯田的外面都处于被淹没状态。
对于每组数据,第一行为四个整数n,m,p,q
之后是一个n*m的矩阵,矩阵中每个整数代表每块田地高度
1<=T<=100
1<=n,m<=100
1<=p<=q<=n*m
1<=梯田高度<=1000000
每组输出占一行
2
3 3 3 6
1 2 3
4 5 6
7 8 9
4 4 5 6
1 2 2 1
2 1 1 2
2 1 1 2
1 2 2 1
3
-1
搜索题:向四周扩一层然后搜索,要用二分搜索
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define Max 1000000
#define MMax 1000000+100 //表示被淹
int T,n,m,p,q;
int map[][];
int ti[][];
int H;
int dirx[]={,,-,,},diry[]={-,,,};
int dfs(int x,int y,int h)
{
int r=;
if(ti[x][y]==MMax||x<||y<||x>(n+)||y>(m+))
return ;
if(ti[x][y]<=h)
{
ti[x][y]=MMax;
for(int i=;i<;i++)
dfs(x+dirx[i],y+diry[i],h);
}
return ;
}
int test()
{
int sum=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(ti[i][j]==MMax)
sum++;
return sum;
}
int main()
{
int i,j,k,sum;
//freopen("in.txt","r",stdin);
cin>>T;
while(T--)
{
bool flag=;
cin>>n>>m>>p>>q;
memset(map,,sizeof(map));
for(i=;i<=n;i++)
for(j=;j<=m;j++)
cin>>map[i][j];
int lb=,rb=Max,mid;
H=Max;
while(rb-lb>)
{
memcpy(ti,map,sizeof(map));
mid=(lb+rb)/;
dfs(,,mid);
sum=test();
if(sum>q)
rb=mid;
else if(sum<p)
lb=mid;
else
{
rb=mid;
flag=;
H=mid;
}
}
if(!flag)
cout<<-<<endl;
else
cout<<H<<endl;
}
}
梯田(dfs)的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- IIS7 MVC网站生成、发布
imihiro IIS7 MVC网站生成.发布 (1)生成. 确保System.Web.Mvc.dll在bin目录下 (2)发布网站到文件系统 (3)在IIS中为网站添加应用程序池(一个虚拟目录,一个 ...
- HoG feature for human detection(HoG 行人识别)
本文大部分内容总结于其他文章 1.介绍 HOG(Histogram of Oriented Gradient)是2005年CVPR会议上,法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解 ...
- Xcode中C、C++、Object-C3种语言的混编
转自: http://hi.baidu.com/onejw/item/f34390c997cdc226a1b50ae http://www.cocoachina.com/ask/questions/s ...
- Bitly缩短网址服务 - Blog透视镜
网站的网址过长或是含有非英文或数字符号,会导致在BBS或者微网志中分享给好友时,产生很多的不方便,Bitly是个缩短网址服务的网站,提供1个短网址转向指定到长网址,免费使用且提供统计报表,例如本篇文章 ...
- Codeforces 229D Towers
http://codeforces.com/problemset/problem/229/D 题意:有n(1<=n<=5,000)座塔排在一条直线上,从左到右每个塔的高度分别为hi(1&l ...
- Linux kernel API的查看
一般来说Linux上查看一些函数API的说明咱们可以man一下.man 2是syscall,man 3是一些库的函数API. 以下是man sections的一些说明 The table below ...
- 性能瞬间飙升!教你如何组RAID0磁盘阵列
性能瞬间飙升!教你如何组RAID0磁盘阵列 1组建RAID0磁盘阵列之Intel篇回顶部 前言:传统硬盘由于工作原理的限制,在性能上的提升非常缓慢.而固态硬盘价格昂贵,短时间内难以被普通用户接受.因此 ...
- 【转】android4.1.2 CTS测试总结
原文网址:http://blog.csdn.net/bboyliaoye/article/details/17299259 公司客户的产品要过google GMS认证,首先要过的就是兼容性测试(CTS ...
- 【转】ubuntu12.04下安装chrome浏览器
原文网址:http://blog.163.com/zhou_411424/blog/static/197362156201331931313549 下载google chrome deb包 32位:h ...
- 【HDU1875】畅通工程再续(MST基础题)
更改成实形数即可.第一次敲完直接交,CE了一次.晕. #include <iostream> #include <cstring> #include <cstdio> ...