30 求调!

P1434 [SHOI2002] 滑雪

DonBeUpLate @ 2023-03-06 19:54:17

#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,m,a[maxn][maxn],ans,cnt;
struct node{
    int x,y;
};
queue<node>q;
int vis[maxn][maxn];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
int bfs(node s) {
    memset(vis,0,sizeof(vis));
    cnt=1;
    q.push(s);
    vis[s.x][s.y]=1;
    while(!q.empty()) {
        node u=q.front();
        q.pop();
        for(int i=0;i<4;i++) {
            int nx=u.x+dx[i];
            int ny=u.y+dy[i];
            if(nx<1||nx>n||ny<1||ny>m) continue;
            if(a[nx][ny]>=a[u.x][u.y]) continue;
            if(vis[nx][ny]==1) continue;
            vis[nx][ny]=1;
            cnt++;
            q.push((node){nx,ny});
        }
    }
    return cnt;
}
int main() {
    cin>>n>>m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) cin>>a[i][j];
    }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            ans=max(ans,bfs((node){i,j}));
        }
    }
    cout<<ans;
    return 0;
}

|