poj 2375 Cow Ski Area bfs
这个题目用tarjan找联通块,缩点,然后统计出入度为0的点理论上是可行的,但问题是会暴栈。考虑到这个题目的特殊性,可以直接用一次bfs找到数字相同且联通的块,这就是一个联通块,然后缩点,统计出入度即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=1e3+9;
int a[maxn][maxn];
int con;
int ss[maxn*maxn],in[maxn*maxn],out[maxn*maxn];
int n,m;
struct
{
int t,s;
}que[maxn*maxn];
bool text[maxn*maxn];
void bfs()
{
con=0;
memset(text,0,sizeof(text));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!text[i*m+j])
{
int front=1,end=0;
que[++end].t=i;
que[end].s=j;
text[i*m+j]=1;
while(front<=end)
{
int t=que[front].t,s=que[front++].s;
for(int p=-1;p<=1;p++)
for(int q=-1;q<=1;q++)
if(fabs(p)+fabs(q)==1&&t+p>=1&&t+p<=n&&s+q>=1&&s+q<=m)
if(a[t][s]==a[t+p][s+q])
if(!text[(t+p)*m+s+q])
{
text[(t+p)*m+s+q]=1;
que[++end].t=t+p;
que[end].s=s+q;
}
}
con++;
for(int i=1;i<=end;i++)
{
ss[que[i].t*m+que[i].s]=con;
}
}
} int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d %d",&m,&n)!=EOF)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
bfs();
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int p=-1;p<=1;p++)
for(int q=-1;q<=1;q++)
if(fabs(p)+fabs(q)==1&&i+p>=1&&i+p<=n&&j+q>=1&&j+q<=m)
if(a[i][j]>=a[i+p][j+q])
if(ss[(i+p)*m+j+q]!=ss[i*m+j])
{
in[ss[(i+p)*m+j+q]]++;
out[ss[i*m+j]]++;
}
int ansin=0,ansout=0,ans;
for(int i=1;i<=con;i++)
{
if(in[i]==0)
ansin++;
if(out[i]==0)
ansout++;
}
ans=max(ansin,ansout);
if(con<=1)
printf("0\n");
else
printf("%d\n",ans);
}
return 0;
}
poj 2375 Cow Ski Area bfs的更多相关文章
- POJ 2375 Cow Ski Area(强连通)
POJ 2375 Cow Ski Area id=2375" target="_blank" style="">题目链接 题意:给定一个滑雪场, ...
- POJ 2375 Cow Ski Area
Cow Ski Area Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original I ...
- POJ 2375 Cow Ski Area (强连通分量)
题目地址:POJ 2375 对每一个点向与之相邻并h小于该点的点加有向边. 然后强连通缩点.问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者就可以.注意,当强连通分量仅仅 ...
- POJ 2375 Cow Ski Area[连通分量]
题目链接:http://poj.org/problem?id=2375题目大意:一片滑雪场,奶牛只能向相邻的并且不高于他当前高度的地方走.想加上缆车是的奶牛能从低的地方走向高的地方,求最少加的缆车数, ...
- POJ 2375 Cow Ski Area【tarjan】
题目大意:一个W*L的山,每个山有个高度,当且仅当一个山不比它相邻(有公共边的格子)的山矮时能够滑过去,现在可以装化学电梯来无视山的高度滑雪,问最少装多少电梯使得任意两点都可到达 思路:最后一句话已经 ...
- POJ2375 Cow Ski Area (强连通)(缩点)
Cow Ski Area Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- D - Cow Ski Area
Description Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently t ...
- [USACO2004][poj2375]Cow Ski Area(在特殊图上用floodfill代替强联通算法)
http://poj.org/problem?id=2375 题意:一个500*500的矩形,每个格子都有一个高度,不能从高度低的格子滑到高度高的格子(但相等高度可以滑),已知可以在2个相邻格子上加桥 ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
随机推荐
- HOJ1014
Niven Numbers My Tags (Edit) Source : Unknown Time limit : 1 sec Memory limit : 32 M Submitt ...
- [C#参考]锁定lock
Lock关键字解释: lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁. 下面的示例包含一个 lock 语句. lock 关键字可确保当一个线程位于代码的临界区 ...
- Asp.Net请求处理机制中IsApiRuntime解析
今天看了web请求的生命周期,看完了还有些不懂,就是用反编译工具,查看封装内库的内部实现. 从计算机内部查到web.dll,使用反编译工具打开 打开后 public int ProcessReques ...
- VUE中的v-if与v-show
1.共同点 都是动态显示DOM元素 2.区别 (1)手段:v-if是动态的向DOM树内添加或者删除DOM元素:v-show是通过设置DOM元素的display样式属性控制显隐: (2)编译过程:v-i ...
- 关于express4不再支持body-parser
express的bodyParser能将表单里的数据格式化,bodyParser原是绑定在express中的,但从express4开始,不在绑定了 如果依然直接使用app.use(express.bo ...
- C语言迭代求解
date : 2013/8/12 desinger :pengxiaoen 今天看 国外电子信息科学经典教材系列 <电子电路分析与设计> 电子工业出版社的 的19 ...
- NodeJS 从0开始
查看Node 基本配置$ npm config ls -l $npm help install将展开install的help文档 初始化目录 npm init 根据提示完成 将生成package.js ...
- director.js教程
directive.js 初始化和注册路由 director.js 的主要对象是Router对象,构造方法如下: var router = new Router(routes); //routes为路 ...
- DINOR闪存知识
闪速存储器(Flash Memory)是一类非易失性存储器NVM(Non-Volatile Memory)即使在供电电源关闭后仍能保持片内信息:而诸如DRAM.SRAM这类易失性存储器,当供电电源关闭 ...
- Spring Boot MyBatis 连接数据库
最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...