记录编号 |
153699 |
评测结果 |
AAAAAAAAAAAAAA |
题目名称 |
[USACO Feb08] 流星雨 |
最终得分 |
100 |
用户昵称 |
devil |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.040 s |
提交时间 |
2015-03-18 19:56:48 |
内存使用 |
1.05 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <cstring>
#include <sstream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN=310;
const int MAX_INT=0x7fffffff;
const int MAXT=210;
struct node
{
int x;int y;int t;
node() {x=0;y=0;t=0;}
};
int G[MAXN][MAXN];
int vis[MAXN][MAXN];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
void BFS()
{
queue<node> q;
node st;st.x=st.y=st.t=0;
q.push(st);
while(!q.empty())
{
node d=q.front();
q.pop();
if(G[d.x][d.y]==-1) {printf("%d\n",d.t);return;}
for(int i=0;i<4;i++)
{
node nd=d;
nd.x+=dx[i];
nd.y+=dy[i];
nd.t++;
if(nd.x>=0&&nd.y>=0&&!vis[nd.x][nd.y])
{
if(G[nd.x][nd.y]==-1||G[nd.x][nd.y]>nd.t)
{
q.push(nd);
vis[nd.x][nd.y]=1;
}
}
}
}
printf("-1\n");
}
int main()
{
///freopen("sample_data.in","r",stdin);
freopen("meteor.in","r",stdin);
freopen("meteor.out","w",stdout);
int m;scanf("%d",&m);
memset(vis,0,sizeof(vis));
memset(G,-1,sizeof(G));
for(int i=0;i<m;i++)
{
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
if(G[x][y]==-1||G[x][y]>t) G[x][y]=t;
if(x>0&&(G[x-1][y]==-1||G[x-1][y]>t)) G[x-1][y]=t;
if(y>0&&(G[x][y-1]==-1||G[x][y-1]>t)) G[x][y-1]=t;
if(G[x+1][y]==-1||G[x+1][y]>t) G[x+1][y]=t;
if(G[x][y+1]==-1||G[x][y+1]>t) G[x][y+1]=t;
}
BFS();
return 0;
}