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,一经查实,立即删除!

相关文章

关于IE8的SCODEF和 CREDAT

这里提供一些信息供理解IE8中的松散耦合处理方式。 由于IE8的LCIE更新&#xff0c; 现在比较难知道当前的tab是哪个iexplore.exe在处理。 如果你在用vista以上的系统&#xff0c; 任务管理器里有两列可以提供信息&#xff0c;分别是 commandline 和 pid&#xff0c; 如果这两列…

Cacls命令使用格式

Cacls命令使用格式如下&#xff1a; Cacls filename [/T] [/E] [/C] [/G user:perm] [/R user [...]] [/P user:perm [...]] [/D user [...]] Filename——显示访问控制列表&#xff08;以下简称ACL&#xff09;&#xff1b; /T——更改当前目录及其所有子目录中指定文件的 ACL…

前段mui框架初识

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

attrib指令

attrib 指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统. 只读属性是指文件只可以做读的操作.不能对文件进行写的操作.就是文件的 写保护 . 存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.…

mysql创建表时反引号的作用

试用navicat工具查看现网mysql建表语句时&#xff0c;发现表名和字段名都是反引号引起来的 CREATE TABLE tab_notice_title_tv (i_id int(11) NOT NULL AUTO_INCREMENT,c_opcom_key varchar(32) DEFAULT NULL,c_view_type int(11) DEFAULT 1 COMMENT 平台类型,1:标清,2:高清,c_…

关于 Unity 版本升级后可能会引起偶发光照图错乱的问题

近期项目遇到一个奇怪的问题&#xff0c;使用 Unity 2017 版本升级后&#xff0c;团队中某些人的机器光照图总是不正确&#xff0c;而有的人是正确的&#xff0c;一直不知道为什么。 为了查到这个奇怪问题的原因&#xff0c;首先查看了美术的在 Max 中的导出设置&#xff0c;虽…

解决LSP问题导致无法上网

判断LSP是否损坏&#xff0c;以及修复方式的微软网址&#xff1a; http://support.microsoft.com/?scidkb%3Bzh-cn%3B811259 Winsock LSP全称Windows Socket Layered Service Provider(分层服务提供商)&#xff0c;它是Windows底层网络Socker通信需要经过的大门。一些流氓软件…

关于(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",…

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

函数MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);实际上是对注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations键进行修改&#xff0c;让操作系统在下一次启动后&#xff0c;AutoChk运行后&#xff0c…

【微信支付坑】

&#xff08;1&#xff09;每次去生成预支付时的订单号必须是不一样的--生成了没有支付 再次去支付要注意 &#xff08;2&#xff09;退款使用支付时支付异步返回&#xff08;微信订单号&#xff1a;transaction_id&#xff09; 转载于:https://www.cnblogs.com/fyandy/p/93324…

sc.exe 详解

sc.exe是一个命令行下管理本机或远程主机服务的工具,他的功能是非常强大的, 下面我们来讲讲他的一些常用的基本用法: 你可以在命令行下键入sc.exe/?获得帮助. 我们以在本机为例. 1.SC的基本格式: sc <server> [command] [service name] <option1> <optio…

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…

洛谷P3369 普通平衡树

刚学平衡树&#xff0c;分别用了Splay和fhq-treap交了一遍。 这是Splay的板子&#xff0c;貌似比较短&#xff1f;Splay #include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int N 100005, IN…

利用专用文件夹隐藏文件 (tasks、fonts)

专用文件夹控制面板、回收站和计划任务文件夹%systemroot%tasks 。 可以通过在cmd.exe 下复制一个文件过去。例如&#xff1a; copy abc.txt %systemroot%tasks 键入&#xff1a; cd %systemroot%tasks 你可以看到&#xff0c;文件已经复制到了tasks目录中了。但是如果你通过资…

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

我已把此木马样本传到以下链接&#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…

剑指Offer名企面试官精讲典型编程题pdf

下载地址&#xff1a;网盘下载 《剑指Offer&#xff1a;名企面试官精讲典型编程题&#xff08;第2版&#xff09;》剖析了80个典型的编程面试题&#xff0c;系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。《剑指Offer&#xff1a;名企面试官精讲典型…

木马爱修改的常见注册表项及其功能

IE相关&#xff1a; 设置IE多线程下载网页的线程数&#xff1a; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings MaxConnectionPerServer&#xff08;字符串值&#xff09; 10&#xff08;设置最大同步下载连接数为10&#xf…

使用fiddler的过滤条件

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

贪心之活动选择问题

将活动按照结束时间单调递增排序 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std;struct node {int b,e; }a[1000],temp;int cmp(node x,node y) {return x.e<y.e; }int main() {int i,j,n,p,…