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的常

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<cmath>
  6. using namespace std;
  7. #define R register
  8. int tu[507][507];
  9. bool sf[507][507];
  10. int q[250007][2];
  11. int mx[5]={0,1,0,-1,0};
  12. int my[5]={0,0,1,0,-1};
  13. inline int read()
  14. {
  15. char ch=getchar();
  16. int x=0;
  17. while(ch<'0'||ch>'9')ch=getchar();
  18. while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
  19. return x;
  20. }
  21. struct emm{
  22. int l,r;
  23. }a[50007];
  24. int tot=0;
  25. void con(int x,int y)
  26. {
  27. a[++tot].l=x;
  28. a[tot].r=y;
  29. return;
  30. }
  31. bool cmp(emm qaq,emm qwq)
  32. {
  33. return qaq.l==qwq.l?qaq.r<qwq.r:qaq.l<qwq.l;
  34. }
  35. bool b[507];
  36. int main()
  37. {
  38. //freopen("a.in","r",stdin);
  39. int n=read(),m=read();
  40. for(R int i=1;i<=n;++i)
  41. for(R int j=1;j<=m;++j)
  42. tu[i][j]=read();
  43. for(R int i=0;i<=n+1;++i)
  44. tu[i][0]=tu[i][m+1]=99999999;
  45. for(R int j=0;j<=m+1;++j)
  46. tu[0][j]=tu[n+1][j]=99999999;
  47. int flag=1;
  48. for(R int j=1;j<=m;++j)
  49. {
  50. memset(sf,0,sizeof(sf));
  51. int he=0,ta=1;
  52. q[1][0]=1;
  53. q[1][1]=j;
  54. sf[1][j]=1;
  55. do
  56. {
  57. he++;
  58. int x=q[he][0],y=q[he][1];
  59. for(R int c=1;c<=4;++c)
  60. {
  61. int u=x+mx[c],v=y+my[c];
  62. if(tu[x][y]>tu[u][v]&&!sf[u][v])
  63. {
  64. q[++ta][0]=u;
  65. q[ta][1]=v;
  66. sf[u][v]=1;
  67. }
  68. }
  69. }while(he<ta);
  70. int l=0,flg=2;
  71. for(R int i=1;i<=m;++i)
  72. if(sf[n][i])
  73. {
  74. if(!l){l=i;flg--;}
  75. if(!sf[n][i+1]){con(l,i);l=0;}
  76. }
  77. if(!flg)flag--;
  78. }
  79. sort(a+1,a+tot+1,cmp);
  80. {
  81. for(R int c=1;c<=tot;++c)
  82. for(R int i=a[c].l;i<=a[c].r;++i)
  83. b[i]=1;
  84. int ans=0;
  85. for(R int i=1;i<=m;++i)
  86. if(!b[i])ans++;
  87. if(ans){cout<<0<<endl<<ans<<endl;return 0;}
  88. }
  89. int i=0,l=0,r=0;
  90. int ans=0;
  91. while(r<m)
  92. {
  93. if(a[++i].l<=l)r=max(r,a[i].r);
  94. else {ans++;l=r+1;r=a[i].r;}
  95. }
  96. cout<<1<<endl<<ans<<endl;
  97. return 0;
  98. }

「NOIP2010」「LuoguP1514」引水入城的更多相关文章

  1. 【五一qbxt】day7-1 引水入城

    [noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...

  2. luoguP1514 引水入城 题解(NOIP2010)(Bfs+贪心)

    P1514 引水入城  题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...

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

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

  4. NOIP2010 引水入城

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

  5. luoguP1514 引水入城 x

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

  6. 洛谷P1514 [NOIP2010提高组T4]引水入城

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

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

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

  8. Codevs 1066 引水入城 2010年NOIP全国联赛提高组

    1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...

  9. CODEVS 1066/洛谷 P1514引水入城

    1066 引水入城 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 在一个遥远的国 ...

  10. Luogu 1514 引水入城 (搜索,动态规划)

    Luogu 1514 引水入城 (搜索,动态规划) Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图 ...

随机推荐

  1. ORACLE RMAN增量备份经典理解

    http://blog.itpub.net/26118480/viewspace-1793548/

  2. JFinal2.0极速开发视频教程发布【转】

    原文:http://blog.dreamlu.net/blog/79 目前JFinal越来越火爆,而且使用的公司越来越多.鉴于市面上JFinal的学习资源不多,我们开始基于JFinal2.0录制学习视 ...

  3. python判断一个字符串是否是小数

    最近在写代码的时候,发现一个问题,想判断一个字符串是不是一个合法的小数,发现字符串没有内置判断小数的方法,然后就写了一个判断字符串是否是小数,可以判断正负小数,代码如下:   1 2 3 4 5 6 ...

  4. 关于xshell无法连接到centos的问题

    1.xshell无法连接到centos:拒绝连接(无线网) 在xshell ping centos出现: 解决方法: 1. 2.重启下网卡: [root@localhost ~]# /etc/init ...

  5. python多线程(二)

    原文:http://blog.sina.com.cn/s/blog_4b5039210100esc1.html 基础不必多讲,还是直接进入python. Python代码代码的执行由python虚拟机 ...

  6. noip2013货车运输

    P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...

  7. 网络安全(超级详细)零基础带你一步一步走进缓冲区溢出漏洞和shellcode编写!

    零基础带你走进缓冲区溢出,编写shellcode. 写在前面的话:本人是以一个零基础者角度来带着大家去理解缓冲区溢出漏洞,当然如果你是开发者更好. 注:如果有转载请注明出处!创作不易.谢谢合作. 0. ...

  8. linux下二机制文件的查看和编辑

    linux下很多命令都是二机制:/bin/下的各种命令---/bin/sh./bin/cat./bin/dmesg./bin/hostname等 如何查看这些二机制文件: xxd.hexdump 参考 ...

  9. lua 异常 错误处理 pcall

    lua 错误处理 匿名函数 if pcall(function () local s=object.data[1]['type'] end) then return object.data[1]['t ...

  10. NDK编译STL

    方法: 1.在jni目录下新建Application.mk; 加入 APP_STL :=  stlport_static  右边的值还可以换成下面几个: system - 使用默认最小的C++运行库, ...