Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16313   Accepted: 4291

Description

Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious for her safety, she vows to find her way to a safe location (one that is never destroyed by a meteor) . She is currently grazing at the origin in the coordinate plane and wants to move to a new, safer location while avoiding being destroyed by meteors along her way.

The reports say that M meteors (1 ≤ M ≤ 50,000) will strike, with meteor i will striking point (Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 300) at time Ti (0 ≤ Ti  ≤ 1,000). Each meteor destroys the point that it strikes and also the four rectilinearly adjacent lattice points.

Bessie leaves the origin at time 0 and can travel in the first quadrant and parallel to the axes at the rate of one distance unit per second to any of the (often 4) adjacent rectilinear points that are not yet destroyed by a meteor. She cannot be located on a point at any time greater than or equal to the time it is destroyed).

Determine the minimum time it takes Bessie to get to a safe place.

Input

* Line 1: A single integer: M
* Lines 2..M+1: Line i+1 contains three space-separated integers: Xi, Yi, and Ti

Output

* Line 1: The minimum time it takes Bessie to get to a safe place or -1 if it is impossible.

Sample Input

4
0 0 2
2 1 2
1 1 2
0 3 5

Sample Output

5

Source

(转自http://poj.org/problem?id=3669)

  首先呢讲一下题目的大意,Bessie从原点出发,然后有N个流星会在某个时刻落下,它们会破坏
砸到的这个方格还会破坏四边相邻的方块,Bessie不能经过被破坏的方块,问Bessie到一个安全的地
方(不会被任何流星砸到)至少需要多少时间(移动一格的时间为1),如果不可能,则输出-1
  首先呢可以预处理出某个方块被流星砸中的最小时刻,然后bfs,判断是否在这个时刻之前到达这
个方块,如果是安全的,就设成INF。找到了的第一个INF就是答案。
  注意,虽然有时间,但是还是要判重,第一次忘了,然后就TLE。。
 
Code
 /*
* poj.org
* Problem#3669
* Accepted
* Time:266ms
* Memory:620k
*/
#include<iostream>
#include<cstdio>
#include<fstream>
#include<cstring>
#include<queue>
#include<algorithm>
#define INF 0xfffffff
#define smin(a, b) a = min(a, b);
using namespace std;
typedef bool boolean;
template<typename T>
inline void readInteger(T& u){
char x;
while(!isdigit((x = getchar())));
for(u = x - ''; isdigit((x = getchar())); u = (u << ) + (u << ) + x - '');
ungetc(x, stdin);
}
template<typename T>class Matrix{
public:
T *p;
int lines;
int rows;
Matrix():p(NULL){ }
Matrix(int lines, int rows):lines(lines), rows(rows){
p = new T[(lines * rows)];
}
T* operator [](int pos){
return (p + pos * lines);
}
};
int n;
Matrix<boolean> visited;
Matrix<int> down;
inline void init(){
visited = Matrix<boolean>(, );
down = Matrix<int>(, );
fill(down.p, down.p + * , INF);
memset(visited.p, false, sizeof(boolean) * * );
readInteger(n);
for(int i = , a, b, c; i <= n; i++){
readInteger(a);
readInteger(b);
readInteger(c);
smin(down[a][b], c);
if(a - >= ) smin(down[a - ][b], c);
smin(down[a + ][b], c);
if(b - >= ) smin(down[a][b - ], c);
smin(down[a][b + ], c);
}
}
typedef class Point{
public:
int x;
int y;
int step;
Point(const int x = , const int y = , const int step = ):x(x), y(y), step(step){}
}Point;
int result = -;
queue<Point> que;
const int move[][] = {{, -, , }, {, , , -}};
void solve(){
if(down[][] == INF){
result = ;
return;
}
que.push(Point());
visited[][] = true;
while(!que.empty()){
Point e = que.front();
que.pop();
for(int i = ; i < ; i++){
Point eu = Point(e.x + move[][i], e.y + move[][i], e.step + );
if(eu.x >= && eu.y >= && eu.step < down[eu.x][eu.y] && !visited[eu.x][eu.y]){
if(down[eu.x][eu.y] == INF){
result = eu.step;
return;
}
visited[eu.x][eu.y] = true;
que.push(eu);
}
}
}
}
int main(){
init();
solve();
printf("%d", result);
return ;
}

poj Meteor Shower - 搜索的更多相关文章

  1. poj Meteor Shower

    这道题是下流星,流星会下到上下左右中的位置,而且有时间的,要你求出最短到达安全位置的时间. 这道题要注意边界是可以超过300的 #include<stdio.h> #include< ...

  2. POJ 3669 Meteor Shower(流星雨)

    POJ 3669 Meteor Shower(流星雨) Time Limit: 1000MS    Memory Limit: 65536K Description 题目描述 Bessie hears ...

  3. poj 3669 Meteor Shower

                                                                                                      Me ...

  4. POJ 3669 Meteor Shower (BFS+预处理)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  5. 题解报告:poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  6. POJ 3669 Meteor Shower BFS求最小时间

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31358   Accepted: 8064 De ...

  7. poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  8. Meteor Shower(POJ 3669)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12816   Accepted: 3451 De ...

  9. Meteor Shower POJ - 3669 (bfs+优先队列)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26455   Accepted: 6856 De ...

随机推荐

  1. Rhino

    http://shrinksafe.dojotoolkit.org/ a JavaScript interpreter

  2. 站内SEO规范

    一:文章的原创性 1.修改文章的标题,尽可能的选择新颖的,符合用户搜索习惯的标题. 2.修 改首段内容或自己动手来添加首段文字信息. 3.文章中图片ALT属性的修改和添加. 4.在不影响阅读的情况下, ...

  3. 控制div显示隐藏(有文字图片介绍)

    <div class="toggle"> <p id="zi">收起</p> <p id="zhe" ...

  4. (1.3)mysql 事务控制和锁定语句

    (1.3)mysql 事务控制和锁定语句 lock table 参考转载自:https://www.cnblogs.com/kerrycode/p/6991502.html 关键词:mysql loc ...

  5. sql server 以10分钟分组 统计人数

    请问针对时间段从每天早上7点开始统计每十分钟人 解决思路: 我以前做过一个关于月份的,是说每3个月以分组,其实是一样的.不过可能啊,整体数据量大会有问题.如果你只是求一天的,那绝对没问题.[1]如果只 ...

  6. 高性能mysql第6章

    第6章,优化配置 https://www.cnblogs.com/musings/p/5913157.html 1:服务器读取的配置文件,可以使用下面的命令查询 admin@iZwz92c0zpe8t ...

  7. Approximate Inference 近似推断

    引入 统计推断的核心任务,是观察到一些X(可见变量戒可观察变量)之后计算隐变量Z的后验分布p(Z|X),以及在这个后验分布下计算我们所需要的函数的期望.比如,讲EM时,我们曾计算过对数似然函数在隐变量 ...

  8. [LeetCode] 237. Delete Node in a Linked List_Easy tag: Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  9. PHP 自定义header 参数获取的问题

    有的情况下,我们需要把参数放在Headers 里传递.比如说与提供给移动端的api,不能进行缓存的时候. 但是,自定义的header 经常是拿不到的. 如果是apache 的服务器,可以用 apach ...

  10. mysql查询表基本操作

    数据库表的创建create table <表名>( <列名> <数据类型及长度> [not null], <列名> <数据类型及长度>, . ...