求条
查看原帖
求条
1210103
Program_A2楼主2025/6/27 18:14

rt,用上 O2 MLE,不用TLE.

#include <bits/stdc++.h>
using namespace std;
int mp[302][302],m,p[]={0,0,-1,1},q[]={-1,1,0,0},jm[302][302],v[302][302],ii[1001];
struct Node{
int x,y,t;
}k[50001];
void bfs(){
    queue<Node>a;
    a.push((Node){0,0,0});
    while(a.size()){
        Node u=a.front();a.pop();
        if(jm[u.x][u.y]==0){
            cout<<u.t;
            return;
        }
        if(ii[u.t]==0){
            for(int i=1;i<=m;i++){
                if(u.t==k[i].t){
                    for(int l=0;l<4;l++){
                        int ux=k[i].x+p[l],uy=k[i].y+q[l];
                        if(ux>=0&&ux<=301&&uy>=0&&uy<=301)mp[ux][uy]=1;
                    }
                    mp[k[i].x][k[i].y]=1;
                }
            }
            ii[u.t]=1;
        }
        if(mp[u.x][u.y]==1)continue;
        for(int i=0;i<4;i++){
            int xi=u.x+p[i],yi=u.y+q[i];
            if(mp[xi][yi]==0&&xi>=0&&xi<=301&&yi>=0&&yi<=301&&v[xi][yi]==0)a.push((Node){xi,yi,u.t+1});
        }
        v[u.x][u.y]=1;
    }
    cout<<-1;
}
int main(){
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>k[i].x>>k[i].y>>k[i].t;
        for(int l=0;l<4;l++){
            int ux=k[i].x+p[l],uy=k[i].y+q[l];
            if(ux>=0&&ux<=301&&uy>=0&&uy<=301)jm[ux][uy]=1;
        }
        jm[k[i].x][k[i].y]=1;
    }
    bfs();
    return 0;
}
2025/6/27 18:14
加载中...