求助大佬#7往后就wa

P2895 [USACO08FEB] Meteor Shower S

zty_luogu @ 2021-08-05 23:44:27

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define f(III,MMM,NNN) for(int III=MMM;III<=NNN;III++)
typedef long long int ll;
const int N=1010;
const int dx[]={0,1,-1,0,0},
          dy[]={0,0,0,1,-1};
int t[2010][2010]={};
int bfs[1000010][3]={};//x,y,时间 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    memset(t,127,sizeof(t));
    for(int i=1;i<=n;i++)
    {
        int x,y,tm;
        cin>>x>>y>>tm;
        if(t[x][y]==2139062143||tm<t[x][y])
            t[x][y]=tm;
        for(int j=1;j<=4;j++){
            int xx=x+dx[j];
            int yy=y+dy[j];
            if(xx>=0&&yy>=0&&x<=305&&yy<=305&&(t[xx][yy]==2139062143||tm<t[xx][yy]))
                t[xx][yy]=tm;
        }
    }
//  for(int i=0;i<=10;i++){
//      for(int j=0;j<=10;j++){
//          if(t[i][j]==2139062143)
//              cout<<"- ";
//          else
//              cout<<t[i][j]<<' ';
//      }
//      cout<<endl;
//  }
    bfs[1][0]=0,bfs[1][1]=0,bfs[1][2]=0;
    int l=0,r=1;
    while(l<=r){
        l++;
        for(int i=1;i<=4;i++){
            int xx=bfs[l][0]+dx[i];
            int yy=bfs[l][1]+dy[i];
            int tt=bfs[l][2]+1;
            if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&tt<t[xx][yy]){
                r++;
                bfs[r][0]=xx;
                bfs[r][1]=yy;
                bfs[r][2]=tt;
                if(t[xx][yy]==2139062143){
//                  cout<<xx<<yy;
                    cout<<bfs[r][2];
                    return 0;
                }
            }
        }
    } 
    cout<<-1;
    return 0;
}

by zty_luogu @ 2021-08-05 23:47:26

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define f(III,MMM,NNN) for(int III=MMM;III<=NNN;III++)
typedef long long int ll;
const int N=1010;
const int dx[]={0,1,-1,0,0},
          dy[]={0,0,0,1,-1};
int t[2010][2010]={};
int bfs[1000010][3]={};//x,y,时间 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    memset(t,127,sizeof(t));
    for(int i=1;i<=n;i++)
    {
        int x,y,tm;
        cin>>x>>y>>tm;
        if(t[x][y]==2139062143||tm<t[x][y])
            t[x][y]=tm;
        for(int j=1;j<=4;j++){
            int xx=x+dx[j];
            int yy=y+dy[j];
            if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&(t[xx][yy]==2139062143||tm<t[xx][yy]))
                t[xx][yy]=tm;
        }
    }
//  for(int i=0;i<=10;i++){
//      for(int j=0;j<=10;j++){
//          if(t[i][j]==2139062143)
//              cout<<"- ";
//          else
//              cout<<t[i][j]<<' ';
//      }
//      cout<<endl;
//  }
    bfs[1][0]=0,bfs[1][1]=0,bfs[1][2]=0;
    int l=0,r=1;
    while(l<=r){
        l++;
        for(int i=1;i<=4;i++){
            int xx=bfs[l][0]+dx[i];
            int yy=bfs[l][1]+dy[i];
            int tt=bfs[l][2]+1;
            if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&tt<t[xx][yy]){
                r++;
                bfs[r][0]=xx;
                bfs[r][1]=yy;
                bfs[r][2]=tt;
                if(t[xx][yy]==2139062143){
//                  cout<<xx<<yy;
                    cout<<bfs[r][2];
                    return 0;
                }
            }
        }
    } 
    cout<<-1;
    return 0;
}

更正一下


|