记录编号 550125 评测结果 AAAAAAAAAAAAAA
题目名称 [USACO Feb08] 流星雨 最终得分 100
用户昵称 Gravatar夜莺 是否通过 通过
代码语言 C++ 运行时间 0.044 s
提交时间 2020-03-02 23:07:17 内存使用 3.89 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int MAXN=310;
long long a[MAXN][MAXN]={0};
bool have[MAXN][MAXN]={false};
int rx[5]={0,1,0,-1,0},
    ry[5]={0,0,1,0,-1};
struct node{
	int xi;
	int yi;
	int ti;
}dui[MAXN*MAXN];
int n,t,w=1,atime;
int bfs(){
	have[1][1]=true;
	dui[1].xi=dui[1].yi=1;
	if(a[1][1]==-1)
		return 0;
	do{
		t++;
		atime=dui[t].ti+1;
		for(int i=1;i<=4;i++){
			int xx=dui[t].xi+rx[i],yy=dui[t].yi+ry[i];
			if(!xx||!yy)continue;
			if(a[xx][yy]==-1)
				return atime;
			if(atime<a[xx][yy]){
				if(!have[xx][yy]){
					w++;
					dui[w].xi=xx;
					dui[w].yi=yy;
					dui[w].ti=atime;
					have[xx][yy]=true;
				}
			}
		}
	}while(t<w);
	return -1;
}
int main(){
	freopen("meteor.in","r",stdin);
	freopen("meteor.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<MAXN;i++)
		for(int j=1;j<MAXN;j++)
			a[i][j]=-1;
	for(int i=1,x,y,T;i<=n;i++){
		scanf("%d%d%d",&x,&y,&T);
		x++;
		y++;
		for(int i=0;i<=4;i++)
		if(a[x+rx[i]][y+ry[i]]==-1||a[x+rx[i]][y+ry[i]]>T)
			a[x+rx[i]][y+ry[i]]=T;
	}
	printf("%d",bfs());
	return 0;
}