「NOIP2010」「LuoguP1514」引水入城
Description
在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 N×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。
为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。
因此,只有与湖泊毗邻的第 1 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。由于第 N 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。
Input
每行两个数,之间用一个空格隔开。输入的第一行是两个正整数 N,M ,表示矩形的规模。接下来 N 行,每行 M 个正整数,依次代表每座城市的海拔高度。
Output
两行。如果能满足要求,输出的第一行是整数 1 ,第二行是一个整数,代表最少建造几个蓄水厂;如果不能满足要求,输出的第一行是整数 0 ,第二行是一个整数,代表有几座干旱区中的城市不可能建有水利设施。
Sample Input1
2 5
9 1 5 4 3
8 7 6 1 2
Sample Output1
1
1
Sample Input2
3 6
8 4 5 6 4 4
7 3 4 3 3 3
3 2 2 1 1 2
Sample Output2
1
3
Hint
【样例1 说明】
只需要在海拔为 9 的那座城市中建造蓄水厂,即可满足要求。
【样例2 说明】
上图中,在 3 个粗线框出的城市中建造蓄水厂,可以满足要求。以这 3 个蓄水厂为源头在干旱区中建造的输水站分别用3 种颜色标出。当然,建造方法可能不唯一。
【数据范围】

题解
考虑数据范围,我们可以乱搞。
首先找一个湖泊边的城市,跑bfs,要求h [ temp ] < h [ now ] ,记录经过的点
然后在沙漠边上找被标记了的区间,如果有两个以上的区间被标记,那么无解(出现了不可逾越的小山包)。
重复m次,每次记得重置。
然后贪心做一遍区间覆盖。嗯。
/luogu迷之数据 第五个点卡了一波992ms的常
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define R register
int tu[507][507];
bool sf[507][507];
int q[250007][2];
int mx[5]={0,1,0,-1,0};
int my[5]={0,0,1,0,-1};
inline int read()
{
char ch=getchar();
int x=0;
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x;
}
struct emm{
int l,r;
}a[50007];
int tot=0;
void con(int x,int y)
{
a[++tot].l=x;
a[tot].r=y;
return;
}
bool cmp(emm qaq,emm qwq)
{
return qaq.l==qwq.l?qaq.r<qwq.r:qaq.l<qwq.l;
}
bool b[507];
int main()
{
//freopen("a.in","r",stdin);
int n=read(),m=read();
for(R int i=1;i<=n;++i)
for(R int j=1;j<=m;++j)
tu[i][j]=read();
for(R int i=0;i<=n+1;++i)
tu[i][0]=tu[i][m+1]=99999999;
for(R int j=0;j<=m+1;++j)
tu[0][j]=tu[n+1][j]=99999999;
int flag=1;
for(R int j=1;j<=m;++j)
{
memset(sf,0,sizeof(sf));
int he=0,ta=1;
q[1][0]=1;
q[1][1]=j;
sf[1][j]=1;
do
{
he++;
int x=q[he][0],y=q[he][1];
for(R int c=1;c<=4;++c)
{
int u=x+mx[c],v=y+my[c];
if(tu[x][y]>tu[u][v]&&!sf[u][v])
{
q[++ta][0]=u;
q[ta][1]=v;
sf[u][v]=1;
}
}
}while(he<ta);
int l=0,flg=2;
for(R int i=1;i<=m;++i)
if(sf[n][i])
{
if(!l){l=i;flg--;}
if(!sf[n][i+1]){con(l,i);l=0;}
}
if(!flg)flag--;
}
sort(a+1,a+tot+1,cmp);
{
for(R int c=1;c<=tot;++c)
for(R int i=a[c].l;i<=a[c].r;++i)
b[i]=1;
int ans=0;
for(R int i=1;i<=m;++i)
if(!b[i])ans++;
if(ans){cout<<0<<endl<<ans<<endl;return 0;}
}
int i=0,l=0,r=0;
int ans=0;
while(r<m)
{
if(a[++i].l<=l)r=max(r,a[i].r);
else {ans++;l=r+1;r=a[i].r;}
}
cout<<1<<endl<<ans<<endl;
return 0;
}
「NOIP2010」「LuoguP1514」引水入城的更多相关文章
- 【五一qbxt】day7-1 引水入城
[noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...
- luoguP1514 引水入城 题解(NOIP2010)(Bfs+贪心)
P1514 引水入城 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...
- 521. [NOIP2010] 引水入城 cogs
521. [NOIP2010] 引水入城 ★★★ 输入文件:flow.in 输出文件:flow.out 简单对比时间限制:1 s 内存限制:128 MB 在一个遥远的国度,一侧是风景秀 ...
- NOIP2010 引水入城
4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...
- luoguP1514 引水入城 x
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- 洛谷P1514 [NOIP2010提高组T4]引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- vijos p1777 引水入城(bfs+贪心)
引水入城 描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...
- CODEVS 1066/洛谷 P1514引水入城
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个遥远的国 ...
- Luogu 1514 引水入城 (搜索,动态规划)
Luogu 1514 引水入城 (搜索,动态规划) Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图 ...
随机推荐
- Struts2牛逼的拦截器,卧槽这才是最牛的核心!
struts 拦截器 一 拦截器简介及简单的拦截器实例 Struts2拦截器是在访问某个Action或者Action的某个方法,在字段前或者之后实施拦截,并且Struts2拦截器是可以插拔的,拦截器是 ...
- BZOJ——1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
http://www.lydsy.com/JudgeOnline/problem.php?id=1607 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2 ...
- CDOJ_844 程序设计竞赛
原题地址:http://acm.uestc.edu.cn/#/problem/show/844 "你动规无力,图论不稳,数据结构松散,贪心迟钝,没一样像样的,就你还想和我同台竞技,做你的美梦 ...
- BURPSUITE爆破密码
拿DVWA举例子.环境百度自行搭建. 开启burpsuite 选择temporary project(临时工程) 选择默认配置进入后,访问127.0.0.1:8080 安装证书 将这个intercep ...
- Java网络编程之InetAddress和URL
在Java中提供了专门的网络开发程序包---java.net,java的网络编程提供了两种通信协议:TCP(传输控制协议)和UDP(数据报协议). 一.IP(Internet Protocol) 与I ...
- validation set以及cross validation的常见做法
如果给定的样本充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分为训练集(training set).验证集(validation set)和测试集(testing set).训练集用来 ...
- wamp配置虚拟域名
1.打开apache下httpd.conf 我的目录是在F:\wamp\bin\apache\apache2.2.22\conf\httpd.conf 2.去掉这两行前面的#注释 LoadModule ...
- javascript参数arguments对象
ECMAScript函数的参数与大多树其他语言中函数的参数有所不同.ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么类型.函数体是通过arguments对象来访问参数数组.a ...
- nginx-伤心的事
今天测试接口,总是出问题,测试了两天,整个流程就卡在最后一步. 每次采用curl,request等请求访问我的服务器都会返回403状态码,网上找了很多资料 有权限的,有静态文件的,然而很多都没有什么卵 ...
- AVL树,红黑树,B-B+树,Trie树原理和应用
前言:本文章来源于我在知乎上回答的一个问题 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中? 看完后您可能会了解到这些数据结构大致的原理及为什么用在这些场景,文章并不涉及具体操作 ...