求助

P1434 [SHOI2002] 滑雪

nothingness @ 2018-07-12 19:46:29

P1434第二个点WA(数据不能下载qwq) 附评测记录

#include "bits/stdc++.h"
#define N 1000001
#define M 1002
#define map my_map
using namespace std;

int n,m,map[M][M],ans=-1,son[M][M];
int qx[N],qy[N],f[N],h,t;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};

int push(int x,int y)
{
    t++;
    qx[t]=x;
    qy[t]=y;
    f[t]=f[h]+1;
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<=n+1;i++)
        for(int j=0;j<=m+1;j++)
            map[i][j]=INT_MAX;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&map[i][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=0;k<4;k++)
                if(map[i][j]<map[i+dx[k]][j+dy[k]]&&map[i+dx[k]][j+dy[k]]!=INT_MAX)
                    son[i][j]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(!son[i][j])
            {
                h=0,t=0;
                push(i,j);
                do
                {
                    h++;
                    if(map[qx[h]][qy[h]]>map[qx[h]+1][qy[h]])
                        push(qx[h]+1,qy[h]);
                    if(map[qx[h]][qy[h]]>map[qx[h]][qy[h]+1])
                        push(qx[h],qy[h]+1);
                    if(map[qx[h]][qy[h]]>map[qx[h]-1][qy[h]])
                        push(qx[h]-1,qy[h]);
                    if(map[qx[h]][qy[h]]>map[qx[h]][qy[h]-1])
                        push(qx[h],qy[h]-1);
                }
                while(h<t);
                ans=max(ans,f[h]);
            }
    printf("%d",ans);
    return 0;
}

|