传送门

Luogu

解题思路

第一问很好做,只要总第一行的每一个点都跑一边dfs,判断最后一行是否有点标记不了即可。

考虑处理第二问。

其实这一问就是:

把第一行的点都看做是对最后一行一些点的覆盖,求最后一行那段区间的最小覆盖数。

我们可以发现这样一个事情:

每一个第一行的点在最后一行覆盖的都是一段连续的区间。

证明:

假设一个点它的水流只可以覆盖两个最后一行的两端不相邻区间(多段类似)。

那么在有解的前提下,必定会有一条水流流入中间那块没被覆盖的区域,

而这条水流一定会与第一条水流相交,这就意味着第一条水流可以在交点处分一条支流 从而覆盖整个区间,与假设矛盾。

所以我们可以在dfs时预处理出每个第一行节点对应的区间,然后贪心地去选点就好了。

细节注意事项

  • 第一次没用上vis标记居然还只T了两个点hhh

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} const int _ = 502;
const int dx[] = { 1, -1, 0, 0 };
const int dy[] = { 0, 0, 1, -1 }; int n, m, d[_][_];
int vis[_][_], l[_][_], r[_][_]; inline void dfs(int i, int j) {
if (vis[i][j]) return; vis[i][j] = 1;
for (rg int k = 0; k < 4; ++k) {
int ni = i + dx[k], nj = j + dy[k];
if (ni < 1 || ni > n || nj < 1 || nj > m) continue;
if (d[ni][nj] >= d[i][j]) continue;
dfs(ni, nj);
l[i][j] = min(l[i][j], l[ni][nj]);
r[i][j] = max(r[i][j], r[ni][nj]);
}
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(n), read(m);
for (rg int i = 1; i <= n; ++i)
for (rg int j = 1; j <= m; ++j)
read(d[i][j]);
memset(l, 0x3f, sizeof l);
memset(r, 0, sizeof r);
for (rg int j = 1; j <= m; ++j)
l[n][j] = r[n][j] = j;
for (rg int j = 1; j <= m; ++j)
if (!vis[1][j]) dfs(1, j);
int cnt = 0;
for (rg int j = 1; j <= m; ++j)
cnt += !vis[n][j];
if (cnt) { printf("0\n%d\n", cnt); return 0; }
int ans = 0;
for (rg int R, L = 1; L <= m; L = R + 1) {
R = 0;
for (rg int j = 1; j <= m; ++j)
if (l[1][j] <= L) R = max(R, r[1][j]);
++ans;
}
printf("1\n%d\n", ans);
return 0;
}

完结撒花 \(qwq\)

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

  1. 「NOIP2010」「LuoguP1514」引水入城

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

  2. 【NOIP2010】引水入城

    以前一直以为是什么高端DP,看了题解才发现是水题,老是这样看题解才能写出来到赛场上怎么办嘛QAQ 原题: 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好 ...

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

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

  4. NOIP2010 引水入城

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. C语言函数不能返回数组,但可以返回结构体

    为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...

  2. java代码向kafka集群发送消息报org.apache.kafka.common.errors.TimeoutException: Batch Expired

    由于项目是springboot项目,在application.properties加入 logging.level.root=debug debug日志报错信息为kafka集群ip别名访问失败 在wi ...

  3. PTA的Python练习题(十二)-第4章-7 统计学生平均成绩与及格人数

    第4章-7 统计学生平均成绩与及格人数 a=eval(input()) b=list(map(int,input().split())) sum=sum(b) c=[i for i in b if i ...

  4. webpack-bundle-analyzer插件的使用方式

    第一步: npm install --save-dev webpack-bundle-analyzer 第二步: 在build/webpack.prod.config.js中的module.expor ...

  5. WLC HA-维护模式(Maintenance Mode)

    为什么会进入维护模式?试想一下,当一个HA组网中的两个控制器,发生了故障,两个WLC都为active,是否会出现问题?可以想象AP是什么情况,所以,WLC进入维护模式是为了避免脑裂的情况,为了避免这种 ...

  6. nodejs的forEach不支持break打断

  7. jenkins windows 2.204版,免安装,推荐插件齐备.

    windows专用,已安装好推荐插件, 更新了安装源为清华源,也就是说只要官方的插件,你都可以秒速下载了.香不? 解压到一个文件夹,管理员模式运行cmdcd 文件夹名jenkins install这样 ...

  8. 使用IDEA导入一个Maven风格的SSM项目

    转自: 方法一: (我用的这种,导入的方法 File->New->Project from existing sources)(同理,important也是一样的) https://how ...

  9. 自定义Redis作为Session存储服务提供

    之前看网上介绍可使用Redis自定义Session托管,使用第三方的Harbour.RedisSessionStateStore GitHub:https://github.com/TheCloudl ...

  10. 设计模式课程 设计模式精讲 5-2 工厂方法coding

    1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...