记录编号 153699 评测结果 AAAAAAAAAAAAAA
题目名称 [USACO Feb08] 流星雨 最终得分 100
用户昵称 Gravatardevil 是否通过 通过
代码语言 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;
}