P2895 [USACO08FEB]Meteor Shower S
阿新 • • 發佈:2020-09-15
- 初始化\(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"); }