NOIP 2010 引水入城

P1514 引水入城

题目描述

在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。

为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。

因此,只有与湖泊毗邻的第 11 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。由于第 NN 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。

输入输出格式

输入格式:

 

每行两个数,之间用一个空格隔开。输入的第一行是两个正整数 N,MN,M ,表示矩形的规模。接下来 NN 行,每行 MM 个正整数,依次代表每座城市的海拔高度。

 

输出格式:

 

两行。如果能满足要求,输出的第一行是整数 11 ,第二行是一个整数,代表最少建造几个蓄水厂;如果不能满足要求,输出的第一行是整数 00 ,第二行是一个整数,代表有几座干旱区中的城市不可能建有水利设施。

 

输入输出样例

输入样例#1: 复制
2 5
9 1 5 4 3
8 7 6 1 2
输出样例#1: 复制
1
1
输入样例#2: 复制
3 6
8 4 5 6 4 4
7 3 4 3 3 3
3 2 2 1 1 2
输出样例#2: 复制
1
3

说明

【样例1 说明】

只需要在海拔为 99 的那座城市中建造蓄水厂,即可满足要求。

【样例2 说明】

上图中,在 33 个粗线框出的城市中建造蓄水厂,可以满足要求。以这 33 个蓄水厂为源头在干旱区中建造的输水站分别用3 种颜色标出。当然,建造方法可能不唯一。

【数据范围】

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 501
using namespace std;
int n,m,l,r;
int f[maxn],vi[maxn];
struct node{ int mn,mx; }v[maxn];
int map[maxn][maxn],vis[maxn][maxn];
int e[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int num){if(x==n){vi[y]=1;v[num].mx=max(v[num].mx,y);v[num].mn=min(v[num].mn,y);}for(int i=0;i<4;i++){int cx=x+e[i][0];int cy=y+e[i][1];if(!vis[cx][cy]&&cx<=n&&cx>=1&&cy<=m&&cy>=1&&map[cx][cy]<map[x][y]){vis[cx][cy]=1;dfs(cx,cy,num);}}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)    v[i].mn=0x7fffffff;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&map[i][j]); for(int i=1;i<=m;i++){if(map[1][i-1]<=map[1][i]&&map[1][i]>=map[1][i+1])memset(vis,0,sizeof(vis));vis[1][i]=1;dfs(1,i,i);}int count=0;for(int i=1;i<=m;i++)    count+=vi[i];if(count<m){ printf("0\n%d",m-count); return 0; }memset(f,63,sizeof(f));f[0]=0;for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)if(i<=v[j].mx&&i>=v[j].mn)f[i]=min(f[i],f[v[j].mn-1]+1);printf("1\n%d",f[m]);
}

 

转载于:https://www.cnblogs.com/cangT-Tlan/p/9317433.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前段mui框架初识

由于需要了解了一下mui框架&#xff0c;感觉没有想象的那么好 mui引入过后就要生成他自己的滚动条 而且 不能获取页面的高度 非屏幕的高度 mui上拉加载是会有卡顿现象的 &#xff0c; 这段代码执行完之后会有比较严重的手机段拖动卡顿现象 解决办法 给他设置滚动系数&#…

关于(int argc char **argv)

演示使用opencv显示一幅图片&#xff1a; #include <iostream> #include <core/core.hpp> #include <highgui/highgui.hpp> using namespace std; using namespace cv; void main(int argc,char **argv) {Mat imageimread(argv[1]);imshow("Lena",…

Pytorch中的Batch Normalization操作

之前一直和小伙伴探讨batch normalization层的实现机理&#xff0c;作用在这里不谈&#xff0c;知乎上有一篇paper在讲这个&#xff0c;链接 这里只探究其具体运算过程&#xff0c;我们假设在网络中间经过某些卷积操作之后的输出的feature map的尺寸为4322 4为batch的大小&…

regsvr32.exe

regsvr32.exe用于注册Windows操作系统的动态链接库和ActiveX控件。 regsvr32.exe 文件建议修改权限&#xff0c;删除所有的用户只保存Administrators 和SYSTEM为所有权限 regsvr32.exe是32位系统下使用的DLL注册和反注册工具&#xff0c;使用它必须通过命令行的方式使用&#x…

一个注册为输入法的木马分析

我已把此木马样本传到以下链接&#xff1a;http://download.csdn.net/detail/cs08211317dn/4096819 一&#xff0e;大致描述&#xff1a; 1. 样本名称&#xff1a;z.exe 2. 家族名&#xff1a; PWS:Win32/Zuten.gen!D(MIcrosoft) 3. MD5&#xff1a;E298C3…

使用fiddler的过滤条件

使用fiddler抓包的时候经常一下子显示很多的记录&#xff0c;看的眼花缭乱&#xff0c;需要这时候需要使用过滤条件来帮助你&#xff0c;一般常用的有三种过滤条件&#xff1a; 1.域名过滤&#xff0c;只显示特定域名的记录&#xff1a; *.baidu.com表示所有的百度二级域名会话…

IceSword偏门功能介绍

&#xff08;1&#xff09;进程窗口中单击右键&#xff0c;选择“内存读写”&#xff0c;弹出如下对话框&#xff1a; 输入起始地址和长度就可以读写内存&#xff0c;以及对这段内存进行反汇编。 &#xff08;2&#xff09;用IceSword的监视进线程创建和监视进程终止功能&…

【Apache】Apache ab压力测试工具Window下载和用法详解

ab是apache自带的网站压力测试工具。 使用起来非常的简单和方便。 不仅仅是可以apache服务器进行网站访问压力测试&#xff0c;还可以对其他类型的服务器进行压力测试。 比如nginx,tomcat&#xff0c;IIS等 首先当然是下载安装了。 在这里只讲window下在下载安装 官方下载地址&…

中华黑豹增强版木马分析

样本网址&#xff1a;http://download.csdn.net/detail/cs08211317dn/4144024 一&#xff0e; 大致描述&#xff1a; 1. 样本名称&#xff1a;中华黑豹增强版.exe 2. 家族名&#xff1a; TrojanDownloader:VBS/Lnkget.D(Microsoft) 3. MD5&#xff…

epoll源码分析

epoll源码分析 最近在使用libev过程中遇到一个场景&#xff1a;一个fd从一个ev_loop迁移到另一个ev_loop&#xff0c;会出现这个fd同时存在两个epoll的瞬间。不禁要问了&#xff0c;一个fd同时被两个epoll监视的行为是怎样的&#xff0c;epoll嵌套使用是怎样实现的&#xff1f;…

用windows api 计算文件的md5值

我自己封装了一个函数GetMd5(LPCWSTR FileDirectory)。其中调用了windows api&#xff1a;CryptAcquireContext&#xff0c;CryptCreateHash,CryptHashData等。要计算不同文件的md5值&#xff0c;只需在调用此函数时传入不同文件的全路径即可&#xff0c;不需要额外的dll。示例…

用EnumProcesses()枚举进程

参照msdn的例子&#xff0c;用EnumProcesses&#xff08;&#xff09;枚举进程并输入进程名和句柄。以下代码在vs2008中测试通过&#xff1a; #include "stdafx.h" #include <windows.h> #include "psapi.h" #pragma comment (lib, "psapi.…

利用Tomcat运行一个JSP页面 详细步骤

1.启动Tomcat: 在Tomcat安装目录下的bin文件夹中&#xff0c;运行startup.bat批处理文件。截图如下&#xff1a; 此时会自动弹出窗口&#xff1a; 不要关闭这个窗口。 2.测试Tomcat是否启动成功。 打开浏览器&#xff0c;在地址栏中输入http://localhost:8080&#xff08;Tom…

JSP的三个编译指令-page,include详解

JSP的编译指令是通知JSP引擎的消息。 常见的编译指令有三个&#xff1a; page&#xff1a;该指令是针对当前页面的指令。 include&#xff1a;用于指定如何包含另一个页面。 tablib&#xff1a;用于定义和访问自定义标签。 编译指令格式如下&#xff1a; <% 编译指令…

计算机基础:计算机网络-socket编程

来源&#xff1a;mooc大学华南理工大学计算机网络课程 chapter6 代码&#xff1a;https://github.com/NeilKeats/SocketDemo/commit/5f3a795250a95339106ed741b4355a9c6c3d39e9 1.设计原理&#xff1a;CS系统 2.如何使用&#xff1a; 3.TCP通信的socket例子&#xff1a;文件传输…

JSP的9个内置对象-application

JSP页面中包含9个内置对象&#xff0c;这9个内置对象都是Servlet API的类或者接口的实例&#xff0c;只是JSP规范将它们完成了默认初始化&#xff0c;即它们已经是对象&#xff0c;可以直接使用。 application&#xff1a;javax.servlet.ServletContext的实例&#xff0c;该实…

JSP的7个动作指令-forward指令

forward指令用于将页面响应控制转发给另外的页面。既可以转发给静态的HTML页面&#xff0c;也可以转发到动态的JSP页面&#xff0c;或者转发到容器的Servlet。 JSP的forward指令格式如下&#xff1a; 对于JSP1.0&#xff0c;使用如下语法&#xff1a; <jsp:forward page&q…

JSP的9个内置对象-request

request&#xff1a;javax.servlet.http:HttpServletRequest的实例&#xff0c;该对象封装了一次请求&#xff0c;客户端的请求参数都被封装在该对象里。获取客户端请求参数必须使用该对象。常用的方法有getParameter(String paramName), getParameterValues(String paramName)…

算法图解学习笔记02:递归和栈

计算机内存原理 要说递归和栈的问题&#xff0c;首先就要说下计算机内存的基本原理。简单理解计算机内存原理可以将一台电脑看作超市的存包柜&#xff0c;每个柜子都有柜号&#xff08;即计算机中的地址&#xff0c;如0x000000f&#xff09;。当需要将数据存储到计算机中时&…

JSP的9个内置对象-response

response代表服务器对客户端的响应。大部分时候&#xff0c;程序无须使用response来响应客户端请求&#xff0c;因为有个更简单的响应对象-out。它是页面输出流&#xff0c;是JstWriter的实例。JspWriter是Writer的子类&#xff0c;Writer是字符流&#xff0c;无法输出非字符内…