洛谷 1514 (NOIp2010) 引水入城
题目:https://www.luogu.org/problemnew/show/P1514
如果有解,一个第一行的格子能覆盖第n行的一定是一个连续的区间。
因为如果不连续,则有围住了一些第n行的格子却流不过去的情况。这样被围住的格子肯定谁都流不到它。
!!必须加第54行的判断!不然会无限TLE。dfs似乎是爆栈。那bfs为什么也不行?
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=;
int n,m,a[N][N],ct;
int fx[]={-,,,},fy[]={,-,,};
bool fg[N],vis[N][N];
struct Node{
int l,r;
}b[N],q[N];
bool check(int x,int y,int i)
{
int tx=x+fx[i],ty=y+fy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=m&&a[tx][ty]<a[x][y]&&!vis[tx][ty])return true;
return false;
}
void dfs(int x,int y,int rt)
{
vis[x][y]=;
if(x==n){
fg[y]=;b[rt].l=min(b[rt].l,y);
b[rt].r=max(b[rt].r,y);
}
for(int i=;i<;i++)
if(check(x,y,i))
dfs(x+fx[i],y+fy[i],rt);
}
//void bfs(int rt)
//{
// queue<pair<int,int> > qu;
// qu.push(make_pair(1,rt));vis[1][rt]=1;
// while(qu.size())
// {
// int x=qu.front().first,y=qu.front().second;
// qu.pop();
// if(x==n){fg[y]=1;b[rt].l=min(b[rt].l,y);b[rt].r=max(b[rt].r,y);}
// for(int i=0;i<4;i++) if(check(x,y,i))
// {
// vis[x+fx[i]][y+fy[i]]=1;
// qu.push(make_pair(x+fx[i],y+fy[i]));
// }
// }
//}
bool cmp(Node u,Node v){return u.l==v.l?u.r>v.r:u.l<v.l;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)scanf("%d",&a[i][j]);
for(int i=;i<=m;i++)
{
if(a[][i-]>a[][i]||a[][i+]>a[][i])continue;////////
memset(vis,,sizeof vis);vis[][i]=;
b[i].l=m+;dfs(,i,i);
}
int cnt=;
for(int i=;i<=m;i++)if(!fg[i])cnt++;
if(cnt){
printf("0\n%d",cnt);return ;
}
sort(b+,b+m+,cmp);
for(int i=;i<=m;i++)
{
q[++ct]=b[i];
while(b[i].l==b[i+].l)i++;
}
q[ct+].l=m+;
int now=,cr=,k=;
while(now<m)
{
for(;q[cr].l<=now+;cr++)k=max(k,q[cr].r);
now=k;cnt++;
}
printf("1\n%d",cnt);
return ;
}
洛谷 1514 (NOIp2010) 引水入城的更多相关文章
- [洛谷P1514] NOIP2010 引水入城
问题描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- 洛谷 P1514 【引水入城】
题库 :洛谷 题号 :1514 题目 :引水入城 link :https://www.luogu.org/problemnew/show/P1514 思路 :搜索从第一排开始能覆盖最后一排的区间L ~ ...
- 【题解】洛谷P1514 [NOIP2010TG] 引水入城(DFS+DP)
次元传送门:洛谷P1514 思路 可以证明如果有解 那么每个蓄水池可以覆盖到的干旱区必定是线段 证明: 举个栗子 8 9 8 7 9 7 6 9 6 明显到不了中间的点 如果不是连续的线段 中间肯定有 ...
- Luogu 1514 [NOIP2010] 引水入城
我就是过来开心一下……这道题从开坑以来已经堆积了大半年了……今天才发现广搜一直写挂…… 丢个线段覆盖的模板,设$f_{i}$表示覆盖区间[1, i]的最小代价,$g_{i, j}$表示覆盖区间[i, ...
- 521. [NOIP2010] 引水入城 cogs
521. [NOIP2010] 引水入城 ★★★ 输入文件:flow.in 输出文件:flow.out 简单对比时间限制:1 s 内存限制:128 MB 在一个遥远的国度,一侧是风景秀 ...
- NOIP2010 引水入城
4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...
- 题解【洛谷P1514】[NOIP2010]引水入城
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 \(N\) 行 \(M\) 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市 ...
- NOIP2010引水入城[BFS DFS 贪心]
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- NOIP2010 引水入城 题解
http://www.rqnoj.cn/problem/601 今天发现最小区间覆盖竟然是贪心,不用DP!于是我又找到这题出来撸了一发. 要找到最上面每个城市分别能覆盖最下面哪些城市,如果最下面有城市 ...
随机推荐
- [BZOJ2017][Usaco2009 Nov]硬币游戏
Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起 ...
- [BZOJ1018]堵塞的交通traffic
Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一 ...
- 编写基本的 udev 规则
来自: https://linux.cn/article-9365-1.html?utm_source=index&utm_medium=more 读者对象 理解 udev 背后的基本概念,学 ...
- jvm-java内存模型与锁优化
java内存模型与锁优化 参考: https://blog.csdn.net/xiaoxiaoyusheng2012/article/details/53143355 https://blog.csd ...
- NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project
https://blog.rsuter.com/nswag-tutorial-integrate-the-nswag-toolchain-into-your-asp-net-web-api-proje ...
- Linux设置中文语言的一种方式
刚开始接触Linux时,如果对于英语不太好的人来说,看到英语的系统时就有点头晕. 能把Linux系统设置为中文就变得急需了. 有一个最简单的方法就是,在登录时,下面就有一个选择语言的选项. 如图:
- Java视频教程等百度云资源分享——更新ing
韩顺平javase(87讲)密码:hsp789 链接:https://pan.baidu.com/s/1eNCyvFcVHsd7P4gdvrFqtw密码:el1y 韩顺平javaee(66讲)密码:h ...
- PAT1042. Shuffling Machine (20)
#include <iostream> #include <vector> using namespace std; int n; string card[54]={" ...
- C++中map的用法
map的特性是,所有元素都会根据元素的减值自动被排序.map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一个元素会被视为键值,第二个元素会被视为实值.map不允许两 ...
- Hibernate -- 检索方式 HQL
Hibernate 提供了以下几种检索对象的方式 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的OID 来检索对象 HQL 检索方式:使用面向对象的HQL查询 ...