传送门

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. 华为交换机MSTP+VRRP配置实例说明文档

    华为交换机MSTP+VRRP配置实例说明文档 拓扑图 IP地址规划表 设备名称 设备接口 对端设备 对端接口 VLAN VLAN /接口地址 备注 SW0 GE0/0/23 SW2 GE0/0/23 ...

  2. Android WIFI的基本操作

    WIFI管理类 class WifiConnector { private ExecutorService executors; Handler mHandler; WifiManager wifiM ...

  3. Ubuntu16.04升级 Ubuntu18.04

    1.更新资源 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt dist-upgrade 2.安装update-manager-core ...

  4. python中的一等对象--函数

    一等对象 什么是一等对象: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 python中的字符串,列表什么的都是一等对象,但对如果之前只是使用c++.jav ...

  5. c# 遍历类中的方法名称

    //Assembly.Load("namespace").GetType("namespace.class名称"); var t = Assembly.Load ...

  6. Navicat连接Oracle 报 ORA-12737 set CHS16GBK错误

            4,680   今天看到0day5上面更新了一个用友ERP的漏洞,确实可以下载任意文件:但是用友ERP基本上都是使用了oracle数据库,必须要有一个好的数据库连接工具才可以,Navi ...

  7. 2018. first week now at home

    外面雪刚停. 现在是2018.1.5 2018 needs to consider next steps了.未雨绸缪啊     下面是2017年last working day   外面黑了,水面上黑 ...

  8. 改变javascript函数内部this指针指向的三种方法

    在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. function a() { alert( ...

  9. Alpha冲刺! Day6 - 砍柴

    Alpha冲刺! Day6 - 砍柴 今日已完成 晨瑶:讨论确定/解决了:网络判断使用广播方式.密集光点排布问题.丢失.db/记录html/多媒体文件的处理方式. 昭锡:Android工具包接口文档编 ...

  10. vue_表单控件

    Vue.js中提供 v-model 的指令对表单元素进行双向数据绑定,在修改表单元素值的同时,实例 vm 中对应的属性值也同时更新,反之亦然.本小节介绍主要input元素绑定v-model 后的具体用 ...