Luogu1514 NOIP2010 引水入城 BFS、贪心
NOIP的题目都难以写精简题意
考虑最上面一排的某一个点对最下面一排的影响是什么样的,不难发现必须要是一段连续区间才能够符合题意。
如果不是一段连续区间,意味着中间某一段没有被覆盖的部分比周围都要高(因为当前这一个点的流域越过了这一段区间却又包含了其左右的一段区间,所以它的流域一定会包住这一个没有被流到的部分),这表示有一段区间是无论水源在哪里都无法流到的,所以就是无解了。
我们知道影响范围是一段区间之后,通过BFS把所有区间求出来,就是一个经典的线段覆盖问题了。贪心解决即可
#include<bits/stdc++.h>
using namespace std;
][] , x , y , dir[][] = {,,,-,,,-,};
] , vis[][];
struct qj{
int l , r;
}ans[];
bool cmp(qj a , qj b){return a.l < b.l;}
inline int min(int a , int b){return a < b ? a : b;}
inline int max(int a , int b){return a > b ? a : b;}
int main(){
scanf("%d%d" , &x , &y);
; i <= x ; i++)
; j <= y ; j++)
scanf("%d" , &m[i][j]);
; i <= y ; i++){
memset(vis , , sizeof(vis));
ans[i].l = ; ans[i].r = -;
|| m[][i] >= m[][i - ]) && (i == y || m[][i] >= m[][i + ])){
queue < pair < int , int > > q;
q.push(make_pair( , i));
while(!q.empty()){
pair < int , int > t = q.front();
q.pop();
if(t.first == x){
ans[i].l = min(ans[i].l , t.second);
ans[i].r = max(ans[i].r , t.second);
allVis[t.second] = ;
}
; j < ; j++)
] > && t.first + dir[j][] <= x)
] > && t.second + dir[j][] <= y)
]][t.second + dir[j][]])
]][t.second + dir[j][]] < m[t.first][t.second]){
vis[t.first + dir[j][]][t.second + dir[j][]] = ;
q.push(make_pair(t.first + dir[j][] , t.second + dir[j][]));
}
}
}
}
; i <= y ; i++)
if(!allVis[i]){
;
; j <= y ; j++)
cnt += !allVis[j];
cout << << endl << cnt;
;
}
sort(ans + , ans + y + , cmp);
, num = , dir = ;
while(r <= y){
num++;
;
);
r = newR;
}
cout << << endl << num;
;
}
Luogu1514 NOIP2010 引水入城 BFS、贪心的更多相关文章
- noip2010 引水入城 bfs+贪心
如果能够实现,每个河边的城市对应的控制区域一定是一条线段. 所以直接bfs每个河边的城市,贪心线段的右端点 #include<cstdio> #include<cstring> ...
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- vijos p1777 引水入城(bfs+贪心)
引水入城 描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...
- NOIP2010引水入城[BFS DFS 贪心]
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- NOIP2010_T4_引水入城 bfs+贪心
在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度.为了使 ...
- luogu 1066 引水入城(bfs+贪心)
90分,有一个点TLE.... 首先可以证明一个东西,如果从上面一排的某个点bfs一次到最下面一排的饮水点不是一个区间的话,那么最后一定所有饮水点不会被覆盖完的. 证明考虑反证法. 所以从上面一排的每 ...
- 521. [NOIP2010] 引水入城 cogs
521. [NOIP2010] 引水入城 ★★★ 输入文件:flow.in 输出文件:flow.out 简单对比时间限制:1 s 内存限制:128 MB 在一个遥远的国度,一侧是风景秀 ...
- NOIP2010 引水入城
4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...
- [NOIP2010] 引水入城 贪心 + 记忆化搜索
---题面--- 题解: 本蒟蒻并没有想到bfs的做法,,,, 只会dfs了 首先我们需要知道一个性质. 我们设k[i].l 为在i点建立水库可以支援到的最左边的城市,k[i].r为最右边的. 那么点 ...
随机推荐
- Java并发编程(六)volatile关键字解析
由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识. 一.内存模型的相关概念 Java内存模型规定所有的变量都是存在 ...
- (后端)Java中关于金额大小写的工具类
/** * 金额小数转换成中文大写金额 * * @author Neil Han * */ private static final String UNIT[] = { "万", ...
- TensorFlow实现Softmax回归(模型存储与加载)
# -*- coding: utf-8 -*- """ Created on Thu Oct 18 18:02:26 2018 @author: zhen "& ...
- [20180123]测试SQLNET.EXPIRE_TIME参数.txt
[20180123]测试SQLNET.EXPIRE_TIME参数.txt --//曾经写过一篇linux内核网络参数测试tcp_keepalive,链接http://blog.itpub.net/26 ...
- My strength (C-A-R)
My strength: I am good at problem resolving Challenge In the first year when I come to America I pas ...
- 个人技术博客——linux服务器配置以及flask框架
本次的软件工程实践,我负责我们组后台服务的搭建,我选用了bandwagon的服务器,安装的是Debian GNU/Linux,全程在root用户下操作,后端服务是用python的flask框架,数据库 ...
- 详解JavaScript中void语句的使用
void是在JavaScript中的一个重要的关键字可被用作其单操作数之前出现一元运算符,其可以是任何类型. 此运算符指定不需要返回值,进行计算的表达式.它的语法可能是下列之一: <script ...
- Properties集合概述与存和取
Properties集合:(Map集合下的Hashtable集合下的一个子类) 特点: 1.集合中的键和值都是字符串 2.集合中的数据可以保存到流中,或者从流中获取 该集合通常用于操作以键值对形式存在 ...
- Android的进阶学习(六)--理解View事件分发
http://www.jianshu.com/p/34cb396104a7 有些无奈,期末考试抱佛脚,还好没有挂,现在继续进阶. 好久以前就看到了View的事件分发,但是当时功底不够,源码也不敢深究, ...
- win10搭建ftp服务器的操作方法【图文教程】
我们知道FTP是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.对于win10版本的ftp服务器搭建方法可能有部分用户还不是很清楚,下面这篇文章就是关于win10搭建ftp服务器的 ...