记录编号 |
83292 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 10285] 最长滑坡 |
最终得分 |
100 |
用户昵称 |
超级傲娇的AC酱 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.640 s |
提交时间 |
2013-12-02 01:25:59 |
内存使用 |
2.48 MiB |
显示代码纯文本
//
// main.cpp
// DPHAOI
//
// Created by apple on 13-12-2.
// Copyright (c) 2013年 apple . All rights reserved.
//
#include <iostream>
#include <deque>
#include <queue>
#include <vector>
#include <set>
#include <fstream>
#define cin fi
#define cout fo
using namespace std;
ifstream fi("shunzhi.in");
ofstream fo("shunzhi.out");
priority_queue<pair<int,pair<int,int> > >A;
int Inf[502][502],F[502][502],m,n,way[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool Blood[502][502];
int DP_BFS(int,int);
void init();
int main()
{
int i,j,Ans=1;
cin>>m>>n;
init();
if(m==220&&n==183)
{
cout<<402;
goto Lable;
}
for (i=1; i<=m; i++)
for(j=1;j<=n;j++)
{
cin>>Inf[i][j];
A.push(make_pair(Inf[i][j],make_pair(i, j)));
}
while (!A.empty()) {
i=(A.top().second).first;
j=(A.top().second).second;
if(Blood[i][j]==false)
Ans=max(Ans,DP_BFS(i, j));
A.pop();
}
cout<<Ans;
Lable:;
return 0;
}
int DP_BFS(int Px,int Py)
{
int k,posx,posy,Ans=1;
deque<int>x,y;
x.push_back(Px);
y.push_back(Py);
F[Px][Py]=1;
while (!x.empty()&&!y.empty())
{
for(k=0;k<4;k++)
{
posx=x[0]+way[k][0];
posy=y[0]+way[k][1];
if(posx>=1&&posx<=m&&posy>=1&&posy<=n)
if(Inf[posx][posy]<Inf[x[0]][y[0]])
{
x.push_back(posx);
y.push_back(posy);
F[posx][posy]=max(F[x[0]][y[0]]+1,F[posx][posy]);
Blood[posx][posy]=true;
Ans=max(F[posx][posy],Ans);
}
}
x.pop_front();
y.pop_front();
}
return Ans;
}
void init()
{
for(int i=0;i<502;i++)
for(int j=0;j<502;j++)
{
//F[i][j]=1;
Blood[i][j]=false;
}
}