- 初始化\(g[i][j]\)为INF表示没被炸毁
- 导弹连同周围四个区域一同炸毁
- 多次炸毁的区域炸毁时间取第一次炸毁的时间
const int N=50010;
int g[310][310];
int dist[310][310];
int n;
bool check(int x,int y)
{
return x>=0 && y>=0;
}
int bfs()
{
memset(dist,-1,sizeof dist);
queue<PII> q;
q.push({0,0});
dist[0][0]=0;
while(q.size())
{
PII t=q.front();
q.pop();
int x=t.fi,y=t.se;
if(g[x][y] == INF) return dist[x][y];
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(!check(a,b) || ~dist[a][b]) continue;
if(g[a][b]==INF || g[a][b] > dist[x][y]+1)
{
dist[a][b]=dist[x][y]+1;
q.push({a,b});
}
}
}
return -1;
}
int main()
{
cin>>n;
memset(g,0x3f,sizeof g);
for(int i=0;i<n;i++)
{
int x,y,t;
cin>>x>>y>>t;
g[x][y]=min(g[x][y],t);
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(check(a,b)) g[a][b]=min(g[a][b],t);
}
}
int t=bfs();
cout<<t<<endl;
//system("pause");
}