传送门

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、贪心的更多相关文章

  1. noip2010 引水入城 bfs+贪心

    如果能够实现,每个河边的城市对应的控制区域一定是一条线段. 所以直接bfs每个河边的城市,贪心线段的右端点 #include<cstdio> #include<cstring> ...

  2. luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)

    我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...

  3. vijos p1777 引水入城(bfs+贪心)

    引水入城   描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...

  4. NOIP2010引水入城[BFS DFS 贪心]

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

  5. NOIP2010_T4_引水入城 bfs+贪心

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

  6. luogu 1066 引水入城(bfs+贪心)

    90分,有一个点TLE.... 首先可以证明一个东西,如果从上面一排的某个点bfs一次到最下面一排的饮水点不是一个区间的话,那么最后一定所有饮水点不会被覆盖完的. 证明考虑反证法. 所以从上面一排的每 ...

  7. 521. [NOIP2010] 引水入城 cogs

    521. [NOIP2010] 引水入城 ★★★   输入文件:flow.in   输出文件:flow.out   简单对比时间限制:1 s   内存限制:128 MB 在一个遥远的国度,一侧是风景秀 ...

  8. NOIP2010 引水入城

    4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...

  9. [NOIP2010] 引水入城 贪心 + 记忆化搜索

    ---题面--- 题解: 本蒟蒻并没有想到bfs的做法,,,, 只会dfs了 首先我们需要知道一个性质. 我们设k[i].l 为在i点建立水库可以支援到的最左边的城市,k[i].r为最右边的. 那么点 ...

随机推荐

  1. python之while循环/格式化输出/运算符/初始编码/成员变量

    一.主要内容:1.while 循环 (难点)while 条件: 循环体 break: 直接跳出循环continue:停止当前本次循环,继续执行下一次循环.不会中断循环能让循环退出:(1)break ( ...

  2. 如何判断一个 APP页面是否是H5页面

    1.无网络断开网络,显示404或则错误页面的是H5 2.页面布局a.在手机设置.开发者选项中开启显示布局边界功能:b.进入应用查看布局边界:c.原生应用可以看到各个控件的布局边界,H5只有整个页面的一 ...

  3. Android之ProgressDialog的使用

    ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDialog的创建方式有两种,一种是ne ...

  4. Android--判断是否连接成功了指定wifi

    最近在做wifi的相关的东西,打印WifiInfo的时候 无意间发现一个参数,改参数可以查看是否连接成功了指定wifi,但是这是隐藏的,遂将其反射之.代码如下: //通过反射的方式去判断wifi是否已 ...

  5. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  6. git批量修改已经提交的commit的姓名和邮箱

    首先,我们创建change.sh脚本,并根据个人信息复制以下脚本. #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="填写原来的邮箱 ...

  7. python常用模块json

    python jons模块 json模块 主要是解决数据格式的转换问题,比如python接收到json对象需要转换为python对象,供python处理,亦或者python数据需要发送到其给其他客户端 ...

  8. [20170615]执行dbms_sqldiag.dump_trace看执行计划.txt

    [20170615]执行dbms_sqldiag.dump_trace看执行计划.txt --//上午在想查看10053执行计划时使用包时出现如下提示: SCOTT@book> @ &r ...

  9. 自己搭建anki同步服务器

    最近帮孩子找学习的软件,发现了anki 不过同步速度太慢,但发现可以自己搭建同步服务器 具体方法见https://github.com/dsnopek/anki-sync-server 我的安装过程如 ...

  10. C# MD5 加密

    public static string MD5Encrypt(string clearText) { string result = string.Empty; byte[] byteArray = ...