搜索+贪心。

参考博客:http://blog.sina.com.cn/s/blog_8442ec3b0100xib1.html

主要是要看出来,如果有解的话,每个沿湖城市能够流到的范围是连续的区间...然后1遍dfs判断有无解,2遍确定区间,最后排序贪心。

直觉上来说,如果流到的区域中间是断的,那么中间的地势一定比两边高,从其他地方也流不到。

(理论上是应该bfs的= =)

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <utility>
using namespace std; #define tr(x) printf(#x),putchar('\n')
typedef pair<int, int> P;
const int MAXN = 600, dir[] = {0, 0, 1, -1}, INF = 0x3f3f3f3f;
int H[MAXN][MAXN], vis[MAXN][MAXN], cnt, M, N;
P r[MAXN]; //第一行每个城市可以流到的范围 void dfs(int x, int y){
vis[x][y] = 1;
if(x == N - 1){
++cnt;
}
for(int i = 0; i < 4; ++i){
int dx = x + dir[i], dy = y + dir[3-i];
if(0 <= dx && dx < N && 0 <= dy && dy < M && !vis[dx][dy] && H[dx][dy] < H[x][y]){
dfs(dx, dy);
}
}
} void dfsL(int s, int x, int y){
vis[x][y] = 1;
if(x == 0){
r[y].first = s;
}
for(int i = 0; i < 4; ++i){
int dx = x + dir[i], dy = y + dir[3-i];
if(0 <= dx && dx < N && 0 <= dy && dy < M && !vis[dx][dy] && H[dx][dy] > H[x][y]){
dfsL(s, dx, dy);
}
}
} void dfsR(int s, int x, int y){
vis[x][y] = 1;
if(x == 0){
r[y].second = s;
}
for(int i = 0; i < 4; ++i){
int dx = x + dir[i], dy = y + dir[3-i];
if(0 <= dx && dx < N && 0 <= dy && dy < M && !vis[dx][dy] && H[dx][dy] > H[x][y]){
dfsR(s, dx, dy);
}
}
} int main(){
freopen("in.txt", "r", stdin);
scanf("%d%d", &N, &M);
for(int i = 0; i < N; ++i){
for(int j = 0; j < M; ++j){
scanf("%d", &H[i][j]);
}
} for(int i = 0; i < M; ++i){
if(!vis[0][i]) dfs(0, i);
}
if(cnt < M){
printf("0\n%d\n", M - cnt);
return 0;
} //======================================
for(int i = 0; i < M; ++i){
r[i].first = INF;
}
memset(vis, 0, sizeof(vis));
for(int i = 0; i < M; ++i){
if(!vis[N - 1][i]){
dfsL(i, N-1, i);
}
}
memset(vis, 0, sizeof(vis));
for(int i = M-1; i >= 0; --i){
if(!vis[N - 1][i]){
dfsR(i, N-1, i);
}
} sort(r, r + M); int ans = 0, nowr = -1, maxr, i = 0;
while(i < M && nowr < M - 1){
maxr = -1;
while(i < M && r[i].first <= nowr + 1){
maxr = max(maxr, r[i].second);
++i;
}
nowr = maxr;
++ans;
} printf("1\n%d\n", ans); return 0;
}

[NOIP 2010] 引水入城的更多相关文章

  1. noip 2010 引水入城 贪心 + 搜索

    不难分析出如果有解则每个蓄水厂所能覆盖到的干旱城市一定是连续的.否则,中间那些没被覆盖的部分永远都不能被覆盖到. 当然,每个蓄水厂所覆盖的城市有可能不连续,不过既然有解,则一定都是连续的.我们可以开一 ...

  2. [NOIP 2010]饮水入城 搜索+贪心

    考试的时候写了个dfs找出来了,最后处理的时候想到了贪心,但是正确性没有想通.然后想了想动规,也没想通.最后没办法,用状态的话用了个状压,弄了40分. 正解是bfs+贪心.Dfs也有过的. 下面题解引 ...

  3. [NOIP 2010] 引入入城

    [题目链接] https://loj.ac/problem/2595 [算法] 显然 , 每个第一行的成市控制的一定是一段区间 那么 , 问题就转化为了经典的区间覆盖问题 , 贪心即可 , 时间复杂度 ...

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

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

  5. 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)

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

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

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

  7. 洛谷P1514 引水入城

    洛谷P1514 引水入城 原题链接 一道好题...细节真多 第一次提交90分,然后就GG了,不知从何改起 其实比较简单吧... 首先,一个点的水流向最后一排,一定可以形成一个区间. 不行的话肯定GG ...

  8. NOIP2010 引水入城

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

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

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

随机推荐

  1. 项目启动报错: No naming context bound to this class loader

    发步项目到本地tomcat,启动后,一直包错:  警告: Failed to retrieve JNDI naming context for container [StandardEngine[Ca ...

  2. 【SSH】——梳理三大框架

    [前言] 去年软考,从System.out.println("Hello World!")开始,小编也算是进入java的世界了.转战java以后,虽然仍旧在学习.NET的知识,但越 ...

  3. 【工作感悟】——揭开“PM”的面纱

    [前言] 上次跟大家分享了面试的故事,小编觉得效果还不错,因此小编决定把工作感悟系列写下去,不过时间就不好说了.希望小伙伴们在评论列表中发表自己的看法和观点,积极参与啦~~ [背景] 初来Y公司,作为 ...

  4. Laravel 5 如何实现网站在维护模式下允许指定 IP 用户访问(白名单)

    为了测试需要,有时候需要在网站处于维护模式下允许特定IP访问网站,在 Laravel 中,这可以通过为维护模式编写自定义中间件来实现. 默认情况下,Laravel 使用 CheckForMainten ...

  5. [剑指Offer] 31.整数中1出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  6. Delphi 检查文件是否存在

    Delphi下检查文件是否存在,我们可以使用FileExists函数 其原形如下: Function FileExists(const FileName: string): Boolean; 示例: ...

  7. ContestHunter#17-C 舞动的夜晚

    Description: L公司和H公司举办了一次联谊晚会.晚会上,L公司的N位员工和H公司的M位员工打算进行一场交际舞.在这些领导中,一些L公司的员工和H公司的员工之间是互相认识的,这样的认识关系一 ...

  8. [POI2008] Poc (原名 Trians) Treap+Hash

    这个题和千山鸟飞绝体现出了一种用平衡树解决动态集合问题,主要套路就是蜜汁标记. 这个题我一开始用替罪羊树搞了一下对了28个点,后来我换成了Treap一搞对了14个点,再后来发现被卡了Hash我竟然在自 ...

  9. HttpClientUntils工具类的使用测试及注意事项(包括我改进的工具类和Controller端的注意事项【附 Json 工具类】)

    HttpClient工具类(我改过): package com.taotao.httpclient; import java.io.IOException; import java.net.URI; ...

  10. spring事务不回滚 自己抛的异常

    在service代码中   throw new Excepion("自定义异常“) 发现没有回滚, 然后百度了下, 改为抛出运行时异常  throw new RuntimeException ...