不知道哪里ce了
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e4+5;
struct H{
int x, y, t;
bool operator<(const H &T)const{
return t<T.t;
}
}s[MAXN];
int n, f[302][302], a[302][302];
queue<H> que;
int main(){
// freopen("input.txt", "r", stdin);
scanf("%d", &n);
for(int i=1; i<=n; ++i){
scanf("%d%d%d", &s[i].x, &s[i].y, &s[i].t);
f[s[i].x][s[i].y] = 1;
if(s[i].x>0)
f[s[i].x-1][s[i].y] = 1;
if(s[i].x<300)
f[s[i].x+1][s[i].y] = 1;
if(s[i].y>0)
f[s[i].x][s[i].y-1] = 1;
if(s[i].y<300)
f[s[i].x][s[i].y+1] = 1;
}
sort(s+1, s+n+1);
que.push((H){0, 0, 0});
int q = 1;
for(int i=1; i<=301*301; ++i){
while(s[q].t<=i && q<=n){
a[s[q].x][s[q].y] = 1;
if(s[q].x>0)
a[s[q].x-1][s[q].y] = 1;
if(s[q].x<300)
a[s[q].x+1][s[q].y] = 1;
if(s[q].y>0)
a[s[q].x][s[q].y-1] = 1;
if(s[q].y<300)
a[s[q].x][s[q].y+1] = 1;
++q;
}
while(!que.empty() && que.front().t<i){
H k = que.front();
if(!f[k.x][k.y])
return printf("%d", k.t), 0;
que.pop();
if(k.x>1 && !a[k.x-1][k.y])
que.push((H){k.x-1, k.y, k.t+1});
if(k.x<300 && !a[k.x+1][k.y])
que.push((H){k.x+1, k.y, k.t+1});
if(k.y>1 && !a[k.x][k.y-1])
que.push((H){k.x, k.y-1, k.t+1});
if(k.y<300 && !a[k.x][k.y+1])
que.push((H){k.x, k.y+1, k.t+1});
a[k.x][k.y] = 1;
}
}
puts("-1");
return 0;
}